数据结构/排序/插入排序 -- 逻辑讲解、代码实现、图形展示

一、总体逻辑:

        1. 取出待排元素

        2. 将有序的部分(此处的有序默认为 小->大 )中,大于待排元素的元素后移一位

        3. 将待排元素插入至空位

二、解释:

        1. 取出待排元素,待排元素从1索引开始(因为0索引就一个数,一个数排个锤锤),此时数组中会有一个空位(记住这个空位)

        2. 将有序的部分中,大于待排元素的元素后移一位,那留下的那个空位右边不就是全是大于待排元素的,左边不就是全部小于待排元素的

        3. 然后将待排元素放到空位上

好了,你已经明白了插入排序的大体原理了。

三、接着就是循环:

        1. 因为第一个元素不排(一个元素排个锤锤),所以索引自然就从1到数组长度len遍历咯

        2. 好了,你已经掌握了插入排序的循环版的代码实现了

四、代码附上:

void insertSort_circulation(int *arr, int len)
{
  if (len < 2)
    return;

  // 记录待排元素
  int key;
  // 索引
  int j;

  for (int i = 1; i < len; i++)
  {
    // 1. 取出待排元素
    key = arr[i];
    // 记录有序列中的最后一个元素的索引
    j = i - 1;
    // 2. 有序区域中的元素要比待排元素大 且 索引哟啊大于0 -- 将比待排元素大的元素后移
    while (arr[j] > key && j >= 0)
    {
      // 将比待排元素大的元素后移
      arr[j + 1] = arr[j];
      j--;
    }
    // 3. 插入待排元素
    arr[j + 1] = key;
  }
}



void main()
{
  int arr1[] = {5, 6, 2, 9, 8, 7, 3, 1, 4};
  printf("排序前:\n");
  printArr(arr1, sizeof(arr1) / sizeof(int));
  insertSort_circulation(arr1, sizeof(arr1) / sizeof(int));
  printf("排序后:\n");
  printArr(arr1, sizeof(arr1) / sizeof(int));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值