第一个:
x
或第二个:
l
或第三版:
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]);
有人说第一个,有人说第二个。那么哪一个是对的?有人说第二种是交换排序。很多书说冒泡排序是第三个版本,但很多人称第一个版本是冒泡排序。有评论吗?
答案 0 :(得分:7)
第一个版本是冒泡排序,因为它正在比较每对相邻的项目。
第二个版本是一个选择排序,因为a[i]
在每次外循环迭代后最终成为数组未排序右侧部分中的最小项。
答案 1 :(得分:1)
我在IntelliJ中使用Java在实际数组上测试了两个代码片段。两个版本都按升序排序生成一个数组。
这是我使用的数组:
sdfe
以下是两个版本的输出:
版本1
kk
版本2
int[] a = {1, 9, 3, 5, 4, 2, 8, 6, 7};
第一个版本看起来像标准的冒泡排序,而第二个版本看起来像是其他版本。
答案 2 :(得分:0)
1。第一个:
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]);
这是气泡排序
2。第二个:
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]);
这是选择排序
即使乍一看,它也会给人一种印象,即它反向执行气泡排序,但事实并非如此。正如其他用户已经指出的那样选择
3。第三版:
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;
}
}
}
这实际上是增强气泡排序 这将改善最佳情况。