冒泡排序算法的原理如下:1. 比拟相邻的元素。如果第一个比第二个大,就替换他们两个。2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最初一对。在这一点,最初的元素应该会是最大的数。3. 针对所有的元素反复以上的步骤,除了最初一个。4. 继续每次对越来越少的元素反复下面的步骤,直到没有任何一对数字须要比拟。
例:对 int[] arr = {10,5,9,3,6,8} 进行从低到高排序:
第一轮遍历:从 0 -arr.Length-1,使数组中最大的数,冒泡到最高的地位。第二轮遍历:从 0 -arr.Length-2,使数组中次大的数,冒泡到次高的地位。顺次遍历,从到到低顺次确认地位。
算法 |
最好工夫 |
最坏工夫 |
均匀工夫 |
额定空间 |
冒泡 |
O(n) |
O(n2) |
O(n2) |
0/1 |
public class BubbleSorting {public static int[] BubbleSortingFunc(int[] arr) {for (int cur = arr.length - 1; cur >= 0; cur--) {for (int i = 0; i < cur; i++) {if (arr[i]>arr[i+1]) swap(arr, i,i+1);
}
}
return arr;
}
// 替换数组中两个元素的地位,异或运算的性质,但 i 不等于 j
public static void swap(int[] arr, int i,int j){arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}