c - 哪个是冒泡排序?

标签 c algorithm sorting bubble-sort

第一个:

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

有人说第一个,有人说第二个。那么哪个是对的呢?有人说第二种是互换排序。很多书上说冒泡排序是第三版,但是很多人说第一版是冒泡排序。有什么意见吗?

最佳答案

第一个版本是冒泡排序,因为它比较每对相邻的项目。

第二个版本是选择排序,因为在每次外循环迭代后,a[i] 最终成为数组未排序右侧部分中的最小项。

关于c - 哪个是冒泡排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37163211/

相关文章:

c - 如何使用每个函数确定数字是偶数还是奇数?

javascript - 为什么我的 Wordle 解算器在出现重复字符时会失败?

java - java中冒泡排序结果输出到数组

c - 如何查找给定文件是符号(软)链接还是硬链接(hard link)

c - 为什么地址栏中的 UTF-8 Unicode 与 GET 形式在 C 中有所不同?

algorithm - 数以千计的光线与 3D 空间中的三角形相交

c++ - 如何根据其成员数据对结构/类数组进行排序?

algorithm - 如何在线性计时器中对数组进行排序?

c - 将 bash 变量作为参数传递给 gcc

c - malloc 未使用指向指针的指针正确分配