插入排序(直接插入排序法)原理及代码

本文详细解释了插入排序算法的原理和步骤,并通过两种代码实例展示了如何实现插入排序。文章旨在帮助读者理解算法逻辑,提升编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次给大家分享了下冒泡排序算法,这次在这里继续和大家分享下插入排序算法。。

对于插入排序算法通俗的说就是,将一排数据中第二个插到第一个中后有序,第三个插到前两个中后有序.......一次类推。

用另外一种表达就是:插入排序就是每一步都将一个待排序的数据按着其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

例如:一排数据时4、3、1、2  下面将给大家演示下是如何进行插入排序的,分为三步:


编程思路:

对于给出的一排数据,先将第一个数据当做有序的(毕竟一个么,其实也没有这个有序无序说法),将第二个数据跟有序数据中的最后一个比较,如果比有序数据中的最后一个小则将有序数据中的最后一个数据往后移动,继续和有序数据中的倒数第二个比较,如果比倒数第二个小则将有序数据中的倒数第二个数据往后移动一个位置........直到和有序数据的第一个比较,如果第一个小,则将其往后移动一个位置,将插入的数据插到第一个位置。如果在比较的过程中发现比有序数据中的那个数据大,则就放到上一个往后移动的数据的位置。如果开始跟最后一个有序数据比较就大,那么直接不用动位置,继续下一个插入排序...

具体思路讲的不是特别清晰,如果大家有不明白的地方可以及时的提问....

第一种代码:

void InsertSort(int *array,int n)

{

int i,j ,temp;

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

{

temp=*(array+i);

//如果有序数据中的数据大于需要插入的数据temp则需要将往后移动

for(j=i;j>0 && *(array+j-1)>temp;j--)

{

*(array+j)=*(array+j-1);

}

*(array+j)=temp;//如果小于temp或者所有元素都大于temp或者temp开始就和最后一个有序元素相等

}

}


代码二:

first是数组的一个元素的下标,也就是0,last是最后一个元素的下标也就是元素数目的个数减1;

woid  insert_sort(int array[],int first,int last)

{

int i,j;

int temp;

for(i=first+1;i<=last;i++)

{

temp=array[i];

j=i-1;

while((j>=0)&&(array[j]>temp))

{

array[j+1]=array[j];

j--;

}

//如果存在有大于temp的数

if(j!=i-1)

{

array[j+1]=temp;

}

//如果一开始就temp大于最后一个有序数据的话就进入下次循环

}

}


对于以上的两种代码,第一种比较好,希望大家把第一种弄明白,并且熟练掌握。如有不正当的地方希望大家给予指导...

我还会在接下来的文章中继续分享排序的算法原理及代码....

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值