简单的插入排序

算法思想

将记录 i 插入到 i-1 个已经排好序的记录中。
具体操作:将记录i 顺次和前面的记录i-1,i-2,i-3…进行比较,将所有大于记录i 的记录向后
移动一个,直到遇见小于或等于记录i的记录j,此时记录j后必有一个空位,将记录i放置于此。

实现

//将需要排序的数据从下标1开始放置,a[0]用于记录当前排序的数据,还可以放置数组的越界问题
void insertSort(int a[], int length) {
    //这里从第二个记录开始排序,因为第1个不需要排序。
    int i = 2;
    for (; i <= length; i ++) {
        //记录当前排序数据,并防止了数组的越界
        a[0] = a[i];
        //从已经排好序的最后一个依次向前比较
        int j = i - 1;
        while(a[0] < a[j]) {
            a[j+1] = a[j];
            //j的值最小是0,当j为0时,循环退出。防止了越界
            j --; 
        } 
        a[j+1] = a[0];
    } 
} 

总结

1、使用a[0]作为监视哨,即保存了数据,又防止越界
2、需要从后向前比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值