1、什么是插入排序
插入排序对于少量元素的排序是一个有效的算法。举个栗子,插入排序的工作方式像对打扑克牌时对手中的扑克牌进行排序,开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它查人左手的正确位置。为了找到一张牌中的正确位置,我们从右到左将它与已经拿在手中的每张牌进行比较,拿在左手中的牌总是排序好的,原来这些牌时桌子上牌堆中顶部的牌。这就是插入排序的简单描述。
2、详解
将n个元素的数列分为已有序和无序两个部分,如下所示:
{{a1},{a2,a3,a4,…,an}}
{{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}}
…
{{a1(n-1),a2(n-1) ,…},{an(n-1)}}
每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
3、算法步骤
1 for j = 2 to A.length
2 key = A[j]
3 //insert A[j] into thesorted sequence A[1…….j-1]
4 i = j – 1
5 while i>0 and A[i] > key
6 A[i+1] = A[i]
7 i = i – 1
8 A[i+1] = key
3、实例与代码
已知数组a[]= {1,4,6,8,7,9,10,2,5,3,11};请用插入排序算法对数组进行从小到大排序。
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[] ={1,4,6,8,7,9,10,2,5,3,11};
insertSort(a,0,11);
for (int i =0 ;i <11;i++)
{
printf(“%d,”,a[i]);
}
return 0;
}
void insertSort(int array[],unsigned int first,unsigned last)
{
int i,j;
int temp;
for (i = first+1;i<=last;i++)
{
temp = array[i];
j = i-1;
while((j>=first)&&(array[j]>temp))
{
array[j+1] =array[j];
j–;
}
array[j+1] = temp;
}
}