1. 程式人生 > >冒泡排序和插入排序

冒泡排序和插入排序

lan 插入 tails ref for 循環 href targe == 時間

冒泡排序:

 1     public static void bubblesort(int[] a, int n) {        
 2         for(int i = 0; i < n; ++i) {
 3             boolean flag = false;
 4             for(int j = 0; j < n-i-1; ++j) {
 5                 if(a[j] > a[j+1]) {
 6                     int temp = a[j+1];
 7                     a[j+1] = a[j];
8 a[j] = temp; 9 flag = true; 10 } 11 } 12 if(flag == false) break; 13 } 14 }

插入排序:

 1     public static void insertionsort(int[] a,int n) {
 2         for(int i = 1; i < n; ++i) {
 3             int
temp = a[i]; 4 int j = i - 1; 5 for(; j >= 0; --j ) { 6 if(a[j] > temp) { 7 a[j+1] = a[j]; 8 }else {break;} 9 } 10 a[j+1] = temp; 11 } 12 }

執行效果

冒泡排序花費時間:196ms
選擇排序花費時間:54ms

我的代碼:

 1     public static void insertionsort(int[] a,int n) {
 2         for(int i = 1; i < n; i++) {
 3             int temp = a[i];
 4             for(int j = i; j > 0; j-- ) {
 5                 if(a[j-1] > temp) {
 6                     a[j] = a[j-1];
 7                 }else {break;}
 8                 a[j-1] = temp;    
 9                 }
10             }
11         }        

優化:  

  1、for 循環中 i++ 和 ++i 運行效果一樣,但 ++i 效率更高。https://blog.csdn.net/github_37847975/article/details/77369851

  2、第8行賦值放在了第二層循環中,這樣每次比較都要給 a[j-1] 賦值,增加了計算量。

冒泡排序和插入排序