学习插入排序时,自己先写了一遍,可以实现功能,但在测试算法所用时间的时候发现我写的插入排序竟然比选择排序还慢,分析之后找到原因是我在写for循环时没有多进行了一次运算。代码如下:
public static void sortByInsert(int[] a){
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j > 0 && a[j]<a[j-1]; j--) {
exchange(a,j,j-1);
}
}
}
此时随机生成一个大小为100000的随机数数组进行算法测试发现用时7000多,而之前写的选择排序才2500左右。
对代码优化如下:
public static void sortByInsert(int[] a){
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0 && a[j]<a[j-1]; j--) {
exchange(a,j,j-1);
}
}
}
此时用时1300左右。