代码都是自己照着原理自己写的,自豪一下。
1.先上传统的冒泡排序算法实现
1 /** 2 * 传统冒泡算法 3 * 里面那层的for循环冒泡一遍,会把最大的数值放到最后一位 4 * 外面的那层for循环触发再次遍历 5 * 总之,就是要把所有的泡泡都遍历一遍 6 * @return 7 */ 8 public static int[] bubboleSortByTraditional(int[] arr) { 9 int temp; 10 for (int i = 0; i < arr.length - 1; i++) { 11 for (int j=0;j<arr.length-1-i;j++) { 12 if(arr[j+1]<arr[j]){ 13 temp = arr[j]; 14 arr[j] = arr[j+1]; 15 arr[j+1] = temp; 16 } 17 } 18 for(int n: arr) System.out.print(String.valueOf(n)); 19 System.out.println(" "); 20 } 21 return arr; 22 }
传统冒泡算法,要把所有的元素都冒泡一遍,不管有没有冒泡完都要来一遍。
里面那层的for循环冒泡一遍,会把最大的数值放到最后一位。外面的那层for循环触发再次遍历。总之,就是要把所有的泡泡都遍历一遍。
2.优化的冒泡排序算法实现
1 /** 2 * 优化的冒泡算法,遍历一遍,发现有没有排序好的泡泡,就再遍历一遍,直到没有再冒泡的泡泡 3 * 4 * @return 5 */ 6 public static int[] bubboleSortByOptimization(int[] arr) { 7 boolean rtn = true; 8 while (rtn) { 9 rtn = false; 10 for (int i = 0; i < arr.length - 1; i++) { 11 int x = arr[i]; 12 int y = arr[i + 1]; 13 if (x > y) { 14 arr[i] = y; 15 arr[i + 1] = x; 16 rtn = true; 17 } 18 } 19 for(int n: arr) System.out.print(String.valueOf(n)); 20 System.out.println(" "); 21 if (false == rtn){ 22 break; 23 } 24 } 25 return arr; 26 }
优化的冒泡算法比传统的冒泡算法牛逼的地方就是,遍历一遍,发现有没有排序好的泡泡,就再遍历一遍,直到没有再冒泡的泡泡。这样至少不会让程序一根筋的一直遍历到最后。如果的数组是
int[] arr = {1,2,3,4,5,6},优化的冒泡排序算法,for循环遍历一遍就会得出结论:这tm没啥好排序的,已经排好了...,而传统的就会傻傻的从头遍历到最后。
趁着有兴趣,我得赶紧多写几个算法。