冒泡排序算法 - java实现

代码都是自己照着原理自己写的,自豪一下。

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     }
View Code
传统冒泡算法,要把所有的元素都冒泡一遍,不管有没有冒泡完都要来一遍。
里面那层的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     }
View Code
优化的冒泡算法比传统的冒泡算法牛逼的地方就是,遍历一遍,发现有没有排序好的泡泡,就再遍历一遍,直到没有再冒泡的泡泡。这样至少不会让程序一根筋的一直遍历到最后。如果的数组是
int[] arr = {1,2,3,4,5,6},优化的冒泡排序算法,for循环遍历一遍就会得出结论:这tm没啥好排序的,已经排好了...,而传统的就会傻傻的从头遍历到最后。
趁着有兴趣,我得赶紧多写几个算法。


猜你喜欢

转载自www.cnblogs.com/zhaozichen/p/10579323.html