新手笔记之插入排序

  1. 概念

    插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动

    插入排序的工作方式就像是打扑克牌一样,从牌堆中抽出牌,然后插入左手的合适位置,如果是不排直接抽完所有的牌的话,那就把牌往右边挪一挪,把左边空出一点位置,把牌按顺序插入到左边去,直到这手牌有序。

  2. 步骤

    • 从一个无序的列表中遍历去一个数据,插入到一个有序的列表中。这样说大概是有点难理解,那如果只有一个无序的列表怎么办。我们可以从一个无序列表的第二个数据也就是索引为1开始遍历,索引为0的数据就可以看做是一个只有一个数据的有序列表,因为它只有一个数据,所以它是有序的,这样就比较好理解了吧。
    • 把遍历出的数据插入到有序列表中,怎么插入?首先得遍历这个有序列表,把要插入的数据和遍历出的数据进行比较,大就放该遍历的数据后面,小就放前面,怎么放?这也是个问题。假设有一个无序列表,已经是要插入第三个数据了(索引为2,i=2),所以前面两个数据就都是有序的,假设当前的无序列表是{1,5,3…},要插入的数据的前一个就是有序列表的最后一个元素,这个时候记录当前插入的值,从当前值往前遍历(j=i=2),如果索引i的值小于索引j-1的值,就让索引j-1的值赋给索引j的值(5是大于3的,[j-1]=[j]),反之当前位置就是要插入的位置。这个时候的无序列表为{1,5,5…},然后循环继续(j=1),这个时候(1<3),就把记录的要插入的值赋给当前位置的值,无序列表为{1,3,5…},重复上述操作,直到循环结束。
  3. 代码实现

    void insertion_sort(int arr[], int len){ 
        int i,j,temp; 
        for (i=1;i<len;i++){ 
            temp = arr[i]; 
            for (j=i;j>0 && arr[j‐1]>temp;j‐‐) 
            { 
                arr[j] = arr[j‐1]; 
            } 
            arr[j] = temp; 
        } 
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值