在上一个例子中,每次比较,发现是较小的数,都会交换,每交换一次代价比较大。
我们优化下:
就是每次比较,先不做交换,数组整体后移(要是链表就好弄了)
然后到位置了,再做插入的操作,肯定省点内存,省多少,懒得算了
最后给出代码:
import java.util.Random;
public class InsertionB {
public static void sort(int [] ints){
if(ints.length <= 1 || ints == null) return;
for(int i = 1;i < ints.length;i++){
int temp = ints[i];
int j;
for(j = i - 1 ;j >= 0 ;j--){
if(temp > ints[j]){
break;
}
ints[j + 1]= ints[j];
}
ints[j + 1] = temp;
}
}
public static void main(String [] args){
int [] a = new int[12];
Random r = new Random();
for ( int i = 0;i < a.length;i++) a[i] = r.nextInt(100);
System.out.print("排序前:");
for(int outprint : a){
System.out.print(outprint + " ");
}
sort(a);
System.out.print("\n\r排序后:");
for(int outprint : a){
System.out.print(outprint + " ");
}
}
}
插入排序优化策略
1032

被折叠的 条评论
为什么被折叠?



