插入排序详解
插入排序的原理很简单,讲一组数据分为两组,分别称为有序组与待插入组,每次从待插入组中取一个元素,然后与有序的元素进行比较,并找到合适的位置,然后将该元素插到有序组当中。这样的话,每次插入一个元素,有序组增加,待插入组减少,一直到待插入元素个数为0,当然,插入过程涉及到元素移动,这一点不能忽略了。
一般为了方便,都会把第一个元素作为有序组,其他的均为待插组。
这里有动图的演示:
链接: link
代码演示:
#include<stdio.h>
void InsertSort(int *num,int n)
{
int i = 0;
int j = 0;
int tmp = 0;
for(i = 1;i<n;i++)
{
tmp = num[i]; //从待插入组取出第一个元素。
j = i-1; //i-1即为有序组最后一个元素(与待插入元素相邻)的下标
while( j >= 0 && tmp < num[j] ) //注意判断条件为两个,j>=0对其进行边界限制。第二个为插入判断条件
{
num[j+1] = num[j]; //若不是合适位置,有序组元素向后移动
j--;
}
num[j+1] = tmp; //找到合适位置,将元素插入。
}
}
int main()
{
int i = 0;
int num[8]={9,3,4,2,6,7,5,1};
InsertSort(num,8); // 这里的话也可以用sizeof求出元素的个数
for( i = 0; i < 8; i++)
{
printf("%d ",num[i]);
}
return 0;
}
执行的结果: