这是什么排序算法?我昨晚想到了这个方法,并迅速编写了一些代码,令我惊讶的是完美无缺。我一直在浏览关于排序算法的维基百科文章,并搜索了Stack Overflow,但一直无法找到这个或类似的算法。
这是算法的书面流程:
[3, 1, 0, 4]
^ ^ Check outermost items, swap if necessary
----------------
[3, 1, 0, 4]
^ ^ Check first pair of second farthest apart items, swap if necessary
[0, 1, 3, 4]
----------------
[0, 1, 3, 4]
^ ^ Check second pair of second farthest apart items, swap if necessary
----------------
[0, 1, 3, 4]
^ ^ Check first pair of third farthest apart items, swap if necessary
----------------
[0, 1, 3, 4]
^ ^ Check second pair of third farthest apart items, swap if necessary
----------------
[0, 1, 3, 4]
^ ^ Check third pair of third farthest apart items, swap if necessary
----------------
[0, 1, 3, 4]
Cannot compare closer items (adjacent), done.
这是JavaScript中的算法:
var unsorted = [4, 9, 10, 2, 9, 4, 0];
var sorted = ianSort(unsorted);
function ianSort(array) {
for(var j = array.length; j > 1; j--) {
for(var i = 0; i < array.length - j + 1; i++) {
if(array[i] > array[i + j - 1]) {
var temp = array[i];
array[i] = array[i + j - 1];
array[i + j - 1] = temp;
}
}
}
return array;
}
(我在这里调用了函数IanSort,因为我是第一个想到这个的人。^ _ ^)
答案 0 :(得分:2)
我相信你设计的内容与comb sort有关,这是对冒泡排序的概括,最初以较大的步长开始,然后随着时间的推移衰减步长。传统上,梳理排序的工作原理是从大尺寸开始,然后在每次迭代时通过常数因子衰减间隔大小。您的算法基本上是通过选择一个常量来实现的,这样每次迭代时步长都会缩小一次。
答案 1 :(得分:1)
看起来像Comb sort
答案 2 :(得分:0)
我不太确定,但对我来说它看起来像bubble sort algorithim。
答案 3 :(得分:0)
这似乎是梳子排序算法的一种形式。我还以为我是几年前第一个发现它并且编造了几种变体来测试快速排序和其他排序算法。您可以阅读my research here。
这是一种快速算法,可以与快速排序竞争,甚至可以在某些条件下击败它。