冒泡哪一个?

Tha*_*hPT 4 c sorting algorithm 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]);
Run Code Online (Sandbox Code Playgroud)

或者第二个:

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]);
Run Code Online (Sandbox Code Playgroud)

或第三版:

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;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人说第一个,有人说第二个.那么哪一个是对的?有人说第二种是交换排序.很多书说冒泡排序是第三个版本,但很多人称第一个版本是冒泡排序.任何意见?

fgb*_*fgb 7

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

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