冒泡排序:



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 效率更高。

  2、第8行赋值放在了第二层循环中,这样每次比较都要给 a[j-1] 赋值,增加了计算量。