java直接插入排序

[b]直接插入排序算法,含部分理解,不知道对不对,但是看例子是可以看明白的。[/b]
下图有助理解,于是截图看看:

[img]http://dl2.iteye.com/upload/attachment/0088/0395/a61fc6a0-d08b-3b22-ae2d-ff72a1eee2ab.png[/img]


public int[] insertSort(int[] a) {
/**
* 直接插入排序
* 把第一个数作为基准,所以排序的循环次数为n-1次 从第二个数开始和第一个数比较
* 下面是降序排列
* a[i] < a[i - 1] 如果第二个数小于第一个数,将第二个数记录一下int tmp = a[i]
* 对前面的有序集合进行插入操作 j=i-1
* (永远是对当前需要排序的值,插入到前面已经有序的集合里)
* 从0到i-1 的空间里找出需要插入的位置
*for (; j >= 0 && tmp< a[j]; j--)
*将数据向后移动 直到找到合适的位置
*eg: 假如 i = 3,此时j=2 对下面做插入操作
*(26 48 53) 11 13 48 32 15
* 0 1 2 3 4 5 6 7
* 11<53 则 a[3] = a[2] =53; 此时空出来53的位置 即a[2] 下面接着循环
* 11<48 则 a[2] = a[1] = 48 把 a[1] 的位置让出来了。继续
* 11<26 则 a[1] = a[0] = 26 把a[0] 位置的26 赋值给了a[1] 位置,让出a[0]
* 循环到了尽头,此时j<0 j=-1
* a[j+1] = tmp; 把值插入进去 把这个小的数据插入进去就可以了。

*a[j + 1]= a[j] ;
*
*
*a[j+1] = tmp; 把值插入进去
*
*
*/
for(int i=1;i<a.length;i++){
if(a[i]<a[i-1]){
int tmp = a[i], j = i-1; //从后向前对有序的数进行插入,循环的长度应该是当前操作数的前一个数的索引位置。
//eg:当前操作的是第4个数索引是3,那么插入操作就要针对前面的三个数做,即:j = 3-1=2 即(0-2)这些索引数里面操作。
//下面for循环是:只要比当前操作数大就向后移动一位,让出当前位,如果比当前值小,直接插入到此值的后面
for(;j>=0&&tmp<a[j];j--){
a[j+1] = a[j];
}
a[j+1] = tmp;
}
}
return a;
}


public static void main(String[] args) {
InsertSort is = new InsertSort();
int[] as = { 1, 34, 56, 23, 67, 82, 4, 3, 2, 0, 13, 76, 90, 21, 24, 44,
4 };
int[] a = is.insertSort(as);
System.out.println(Arrays.toString(a));
}


[b]运行结果[/b]:[0, 1, 2, 3, 4, 4, 13, 21, 23, 24, 34, 44, 56, 67, 76, 82, 90]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值