首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog插入排序

Prolog插入排序
EN

Stack Overflow用户
提问于 2012-10-04 03:16:42
回答 1查看 11.5K关注 0票数 4

有一个简单的Prolog插入排序算法:

代码语言:javascript
复制
sorting([A|B], Sorted) :- sorting(B, SortedTail), insert(A, SortedTail, Sorted).
sorting([], []).

insert(A, [B|C], [B|D]) :- A @> B, !, insert(A, C, D).
insert(A, C, [A|C]).

它在普通列表中做得很好:

代码语言:javascript
复制
?- sorting([5, 4, 9, 1, 3, 8], X).
X = [1, 3, 4, 5, 8, 9].

但我还需要对包含它们的列表的子列表进行排序:

代码语言:javascript
复制
?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [5, 4, 3], [6, 3]].

这就是现在的回报。和

代码语言:javascript
复制
?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [3, 4, 5], [3, 6]].

我需要退还的东西。那么我如何对子列表进行排序呢?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-01-08 22:50:19

我提供这个简单的解决方案:

在排序列表中插入元素

代码语言:javascript
复制
insert(X, [], [X]):- !.
insert(X, [X1|L1], [X, X1|L1]):- X=<X1, !.
insert(X, [X1|L1], [X1|L]):- insert(X, L1, L).

插入排序算法使用原理

代码语言:javascript
复制
insertionSort([], []):- !.
insertionSort([X|L], S):- insertionSort(L, S1), insert(X, S1, S).
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12715293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档