直接插入排序
1.插入排序思想
直接插入排序思想是将待排序的数组看作两个部分:有序部分和无序部分,排序过程就是不断将无序部分的元素插入到有序部分合适的位置上,使有序部分元素不断增加而无序部分数据不断减少,直到数组全部有序为止。
假设数组A[0...n-1]
(1)初始时,A[0]作为有序部分,A[1...n-1]为无序部分;
(2)在有序部分进行比较和移动,为无序部分的第一个元素A[1]找到合适的位置,并插入到有序部分,使A[0,1]构成新的有序部分,而A[2...n-1]为剩下的无序部分;
(3)按照步骤(2)执行,直到数组有序。
2.插入排序的实现
根据上述的算法思想描述,可以得到实现代码(C实现)如下。
//插入排序算法 这个是没有优化过的
void insertSort(int *a,int len)
{
int i,j,value;
for(i=1;i<len;i++)
{
value=a[i];//无序的第一个元素
for(j=i-1;j>=0&&a[j]>value;j--)
{
a[j+1]=a[j];
}
a[j+1]=value;
}
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int a[]={9,8,7,6,5,44,98987,45,31,454,3,1};
insertSort(a,12);
return 0;
}