插入排序
- 基本思想:
每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。 - 算法实现:
直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。 - 通俗理解:假设你在斗地主,为了手里的牌条例更清晰,我们规定牌面小的那张要放在牌面大的后面。每抓一张牌(假设为 K ,此时这张牌位于最前面)就要和K后面那张比较,如果比K大则和再后面一张,直到遇到比这张牌小的牌(假设为J),然后将K放在J的前面。而先前位于J前面的元素们则会整体向前移一位给K腾出位置。如果还觉得模糊,可以找两个朋友玩会儿斗地主体验一下算法过程,哈哈。
- 算法代码:
//插入排序
void insertSort(int data[],int length){
for (int i=1; i<length;i++)
{
int temp=data[i];
//前一个数大于当前数则交换位置
for (j = i; j > 0 && data[j-1]>temp; j--)
{
data[j]=data[j-1];
}
data[j]=temp;
}
}
- 代码演示:
最后一个元素5也会类似9的排序过程,小伙伴们可以自己动手试试!
如果觉得不错的话,可以点赞关注哦!如果发现内容有错误,感谢指正!
C语言学习交流群:648422161,欢迎大家加入群聊,共勉~!