插入排序原理以及C语言实现

常见的排序算法,包括像冒泡排序、选择排序、插入排序等等这些常见的排序算法,背后的原理以及相应的代码实现需要我们一一深究。

下面我们主要探究一下插入排序背后的原理以及代码实现。

如下,我们定义数组a

int a[7]={12,20,8,,17,52,49,6};

数组在内存中的数据结构如下:

选择排序开始-------》

第一轮,首先使第一个位置的元素为有序的,如下图

然后判断它的下一位数字20,和它比较,20>12,也是递增有序的,如下,将20纳入框内,框表示已经排好序的元素

下一步将8纳入框内,进行判断,如下所示:

紧接着比较8和前面两个数的大小,将8插入合适的位置

思路是:将8首先存入一个临时变量temp中,由于20>8,将20放入8的位置,再比较8和12的大小,12>8,将12放入它右边第一个也就是20的位置,最后将temp中的值放入12的位置。将8、12、20顺序递增排序。如下图:

下一步继续将17纳入框内,进行比较,如下图:

由于20>17,因此将17存入临时变量temp中,将20的值存入17的位置,继续比较12和17的值,12<17,将17存入20的位置,这个框排序完成,如下图:

继续比较后续的值,按照这样的思路,最终实现如下这样的结果:

最终实现插入排序的算法

C语言的代码实现如下:

void insert_Sort(int *br, int n)
{
    int temp = 0;
    assert(NULL != br && n > 1);
    //对i从1到数组最后一位进行和前面比较的操作
    for (int i = 1; i < n; ++i)
    {
        if (br[i - 1] > br[i])
        {
            temp = br[i];
            int j = i - 1;
            do
            {
                br[j + 1] = br[j];
                --j;
            } while (j >= 0 && temp < br[j]);
            br[j + 1] = temp;
        }
    }
}

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值