插入排序是一个很有意思的排序算法,就跟斗地主的整理卡牌的过程差不多。
大概意思是先将数组的第一个数据当做已经排好了的数据,后面的所有数据都还没有排好顺序,然后依次遍历,找到对应的位置直接交换位置即可。光说估计比较抽象,上图。
如果还觉得比较抽象可以去看https://blog.csdn.net/qq_33289077/article/details/90370899这篇文章,图片也源自这篇文章。
然后上代码:
#include <stdio.h>
#include <string.h>
void inser_sort(int a[], int len)
{
//key为分界线,key之前的我们视为已经排好顺序的
//因为我们将第一个元素视为已经排好顺序的元素所以i应该从1开始
//j=i-1 i从左往右移动,j从右往左移动.
int i,j,key;
for (i=1; i<len; i++)
{
key = a[i];
j=i-1;
while((j>=0) && (a[j]>key))
{
a[j+1] = a[j];
j--;
}
a[j+1] = key;
}
}
int main()
{
int a[]={2,5,6,8,11,9,10,12,9};
int len=(int) sizeof(a)/sizeof(a[0]);
inser_sort(a,len);
int i=0;
for (i=0;i<len;i++)
{
printf("%d ",a[i]);
}
return 0;
}