C语言
您现在所在的位置:首页>企业动态>C语言

十大排序——插入排序

编辑:学到牛牛IT培训    发布日期: 2023-08-08 08:54:46  

插入排序是一种比较简单直观的排序,算是新手入门级排序,逻辑也容易理解。

在生活中,插入排序也是很常见的,比如说军训站队列的时候教官需要对学生的身高进行一个比较,可能两两比较,可能一排进行比较,混迹在高个子中的矮个子就会被单独拧出来,放回矮个人队伍里,在矮个子里突出的高个子也会插入到高个子行列中,这就算是最基本的插入排序的逻辑。

1.png

2.png

接下来官方话语进行解释:插入排序实际上就是对未排序的数组进行排序,从第一个数开始遍历,每次遍历最新的数都要从后往前进行比较,找到比它小的数,然后插在它的后面(这里数组顺序为升序),以此类推,直到遍历完最后一个数,排序完成。


有了大概的一个逻辑之后,再来想插入排序的思路就简单多了:

首先,随机定义一个数组,从第一个数开始进行第一次的遍历,这个时候它的前面没有其他的数,所以比较不了,还是勇站第一位。

3.png

接下来第二位登场,它需要从当前位置从后往前开始比较,找到比它小的那位数(a[i] > a[i-1]),然后插入到它的后面(如图1-1所示 )。 

4.png

图1-1

(若出稿请在素材中更换此图,删除本句话)


数组中每一位数都要进行相同的遍历方式,直到最后一个数比较完(具体遍历过程,由图1-2可见)

5.png

图1-2



附完整代码:

  #include <stdio.h>

   int main()

   {

       int a[]={4,2,5,3,7,1,0};

       int len = sizeof(a)/sizeof(int);

       int i = 0,j = 0;

       for(i = 1; i < len; i++)

  {

          if(a[i] < a[i-1])   //若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。

          {

              j = i-1;

              int x = a[i];

              while(j > -1 && x < a[j])   //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间             

{

                  a[j+1] = a[j];

                  j--;

              }

              a[j+1] = x;  // c插到正确的位置

          }

      }

      for(j = 0; j < len; j++)

      {

          printf("%d ",a[j]);   // 最后打印一遍数组

      }

return 0;

  }


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 扫一扫,免费咨询

  • 微信公众号

学一流技术,找高薪工作

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问