【发布时间】:2016-09-06 21:19:44
【问题描述】:
第一个:
for(int i=0;i<n-1;i++)
for(int j=n-1; j>i;j--)
if(a[j] < a[j-1])
swap(a[j], a[j-1]);
或第二个:
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
if(a[j] < a[i])
swap(a[j],a[i]);
或第三版:
int temp, i, j = 0;
boolean swaped = true;
while (swaped) {
swaped = false;
j++;
for(i = 0; i < arr.length - j; i++){
if(arr[i] > arr[i+1]){
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
swaped = true;
}
}
}
有人说第一个,有人说第二个。那么哪一个是对的呢?有人说第二种是交换排序。很多书说冒泡排序是第三版,但很多人称第一版是冒泡排序。有什么意见吗?
【问题讨论】:
-
第三版 - 有点奇怪。它甚至排序吗?
-
@MichaelDorgan:这是冒泡排序的常见优化
-
猜猜我很久以前就停止使用它了 :) 我想知道为什么?
-
在Selection sort 和Insertion sort 和Bubble sort 上查看维基百科。经过审查,我认为第一个对应于插入排序(递减循环表明如果要信任维基百科),而第二个是冒泡排序。我确信它们都不是选择排序。交换比选择排序更多。
-
在这么多人已经给出答案之后,您不应该更改问题。
标签: c algorithm sorting bubble-sort