- 已在LeetCode执行成功,内存和时间上不是最优,可参考算法
- 简单介绍下插入排序:从第二个开始,每个数字对比前面的每个数字,插入一个合适的位置(前面比他小,后面比他大)。网上有个生动的比喻,就是手里的扑克牌按照有序的方式插入一张新牌
-
注意点:找到要插入的位置,要将对比过的数据都往后挪一位
public static void main(String[] args) {
int[] a = {5,2,3,1};
for(int i=1; i<a.length;i++){
int j=i;//i是要操作的那个值,j之前都是排好序的
while(j>0&&a[i]<a[j-1]){
j--;//i逐一和前面的所有值进行对比,找到那个比他小的结束
}
int y=i-j;//记录下i和要插入的地方中间有几个数值,即有几个值要往后挪一位
int q = a[i];//保存i的值
int x = 0;
while(x<y){
a[i-x] = a[i-x-1];//循环y次,将i前面的y个数都往后挪一个
x++;
}
a[j]=q;//将i的值放到j处,因为在进行对比的时候,我们已经知道,当前j的值是不小于i的最后一个
}
for(int z=0; z<a.length;z++){
System.out.println(a[z]);
}
}