序言插入排序 [英] Prolog insertion sort

查看:112
本文介绍了序言插入排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

There is a simple Prolog insertion sort alghoritm:

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]).

在常规列表中效果很好:

It does well on normal lists:

?- sorting([5, 4, 9, 1, 3, 8], X).
X = [1, 3, 4, 5, 8, 9].

但是我还需要对包含其中任何一个的列表的子列表进行排序:

But I also need to sort sublist of list contains any of them:

?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [5, 4, 3], [6, 3]].

现在返回的是什么.还有

Is what return now. And

?- sorting([2, 5, [5, 4, 3], [6, 3], 4, 8], X).
X = [2, 4, 5, 8, [3, 4, 5], [3, 6]].

我需要退货什么.那么我如何也可以对子列表进行排序?预先感谢!

what I need to return. So how can I sort sublist too? Thanks in advance!

推荐答案

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

在排序列表中插入元素

I offer this simple solution:

Insert element in the sorted list

insert(X, [], [X]):- !.
insert(X, [X1|L1], [X, X1|L1]):- X=<X1, !.
insert(X, [X1|L1], [X1|L]):- insert(X, L1, L).

使用插入排序算法的原理

Use principe of insertion sort algorithm

insertionSort([], []):- !.
insertionSort([X|L], S):- insertionSort(L, S1), insert(X, S1, S).

这篇关于序言插入排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆