设置一个变量t用来提取a[i],拿t与a[i]左侧变量进行比较,比t大的元素右移一位,拿t来补入这个空位。注意,在代码实现时若不注意设置变量t,而用a[i]直接比较的话,排序结果错误,因为当j=i-1时,a[j]这个数若大于a[i]需要右移则变成a[i],此时a[i]已经改变,再与之前的值比较,发生错误。
package com.zzh;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
//
public class Test {
public static void main(String[] args) {
int[] a= {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
insertSort(a);
for(int i=0;i<a.length;i++) {
StdOut.print(a[i]+" ");
}
}
public static int[] insertSort(int[] a) {
int len=a.length,t;
for (int i = 1; i <len; i++) {
t=a[i];
for(int j=i-1;j>=0;j--)
if (t<a[j]) {
a[j+1]=a[j];
a[j]=t;
}
}
return a;
}
}
6117

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



