此算法的好处在于,排序时候从后边开始,将较小者往前边移动。这样较小者会不断往前移动。解决了第一个算法,可能将较小者移到后边的情况,提高了算法效率。在上十万条数据的排序过程中,这种差异将会体现出来。
package facehandjava.sort; public class BubbleSort { public static void main(String[] args) { int[] arrays = {10, 5, 36, 78,56,2, 5, 8, 9, 9}; int min = 0; int max = arrays.length-1; System.out.print("原来的:"); for(int i =0;i<=max;i++) { System.out.print(arrays[i]+","); } System.out.println(); BubbleSort(arrays,max); System.out.print("排序后:"); for(int i =0;i<=max;i++) { System.out.print(arrays[i]+","); } } public static void BubbleSort(int[] arrays,int max) { for (int i = 0; i <= max; i++) { for (int j = 1; j <= max - i; j++) { if (arrays[j - 1] > arrays[j]) { swap(arrays, j - 1, j); } } } } public static void swap(int[] arrays,int a, int b) { int temp = arrays[a]; arrays[a] = arrays[b]; arrays[b] = temp; } }
冒泡的优化:
此算法的好处在于,加个判定,如果再也没有两个位置互换,则证明前一个j-1值总是小于后一个j值。那么直接退出循环即可。
package facehandjava.sort;
public class BubbleSort {
public static void main(String[] args) {
int[]arrays = {10, 5, 36, 78,56,2, 5, 8, 9, 9};
int min = 0;
int max =arrays.length-1;
System.out.print("原来的:");
for(int i =0;i<=max;i++) {
System.out.print(arrays[i]+",");
}
System.out.println();
BubbleSort(arrays,max);
System.out.print("排序后:");
for(int i =0;i<=max;i++) {
System.out.print(arrays[i]+",");
}
}
public static void BubbleSort(int[] arrays,int max) {
booleanisOver = true;
for (int i = 0; i <= max; i++) {
for (int j = 1; j <= max-i; j++) {
if (arrays[j - 1] > arrays[j]) {
swap(arrays, j- 1, j);
isOver = false;
}
}
if (isOver){
break;
}
isOver = true;
}
}
public static void swap(int[] arrays,int a, int b) {
int temp =arrays[a];
arrays[a] = arrays[b];
arrays[b] = temp;
}
}