排序专栏:插入排序

Posted 电脑小白路漫漫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序专栏:插入排序相关的知识,希望对你有一定的参考价值。


Hi大家新年好!


今天给大家推送一种排序方法,叫做插入排序!


具体是怎么实现的呢?

大家来看一下吧:


和冒泡排序法不同,插入排序法似乎更简单,不像冒泡法那样一个一个的去比较,在这里,插入排序先选择一个元素,然后让这个元素跟排在自己之前的其他元素进行比较,最后将他插入到最终位置。


比如我们现在有一组数:


8 2 5 4 6 9 1 3 7 0


第一个元素不用选,所以我们第一次先选第二个元素,让它与排在它之前的元素进行比较:


第一次:2 8 5 4 6 9 1 3 7 0

第二次:2 5 8 4 6 9 1 3 7 0

第三次:2 4 5 8 6 9 1 3 7 0

第四次:2 4 5 6 8 9 1 3 7 0

第五次:2 4 5 6 8 9 1 3 7 0

第六次:1 2 4 5 6 8 9 3 7 0

第七次:1 2 3 4 5 6 8 9 7 0

第八次:1 2 3 4 5 6 7 8 9 0

第九次:0 1 2 3 4 5 6 7 8 9


以上就是冒泡排序法的过程


现在让我们用代码来实现:

#include <stdio.h>
int main(void){ int a[10] = {8, 2, 5, 4, 6, 9, 1, 3, 7, 0}; int i, j, t; for (i=1; i<10; i++){ t = a[i]; for (j=i; j>0 && a[j-1]>t; j--){ a[j] = a[j - 1]; } a[j] = t; } for (i=0; i<10; i++){ printf("%d ", a[i]); } return 0;}


这样就实现了插入排序。


现在让我们来分析一下代码。


代码中第8行到第14行实现了插入排序。

第8行的for循环从1开始,到9结束用来选定数组中的元素。

第9行用一个变量t,来保存选定的元素数值


第10行是内层循环,循环从选定的元素开始,每次减一。这层循环先判断是否为0,如果不为0,再判断是否小于前一个,如果小于就执行本次循环。


在循环里面,我们让数组中的元素向后移动一位,直到不满足条件为止。


等待循环结束后,我们将保存的数值t,赋值给结束时j号位的元素。


这样,插入排序就完成了!


排序专栏,一共八期,加上冒泡排序,一共九种排序方法,过年期间会全部推送。


敬请期待

以上是关于排序专栏:插入排序的主要内容,如果未能解决你的问题,请参考以下文章

算法专栏--希尔排序

排序02-直接插入排序法

十大排序之插入排序与归并排序

《算法零基础100例》(第38例) 基础排序 - 插入排序

《糊涂算法》之八大排序——插入排序

算法小专栏:选择排序