冒泡哪一个?

时间:2016-05-11 12:49:54

标签: c algorithm sorting bubble-sort

第一个:

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

有人说第一个,有人说第二个。那么哪一个是对的?有人说第二种是交换排序。很多书说冒泡排序是第三个版本,但很多人称第一个版本是冒泡排序。有评论吗?

3 个答案:

答案 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;
            }
        }
    }

这实际上是增强气泡排序 这将改善最佳情况。