插入排序是最简单的一种排序方法。它的基本操作就是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。
直接插入排序时,我们将第二个数组元素作为插入数,第一个数作为有序数组。逐个比较两者大小,最后将数插入到合适位置。
代码实现:
/**插入排序**/
void inse(int *data)
{
int t=0,j=0;
for(int i=1;i<MAX;i++)
{
t=data[i];///从待排序数组中取出第二个元素
j=i-1;
while(j>=0&&t<data[j])///比较取出的元素与数组元素的大小,若小则插入左边
{
data[j+1]=data[j];
j--;
}
data[j+1]=t;///找到合适位置将元素插入
}
for(int i=0;i<MAX;i++)
printf(" %d \t",data[i]);
}
运行结果:
时间复杂度:O(n²)
若待排序是随机的,则作为直接插入排序时所需进行各种关键字间的比较次数和移动记录的次数,约为n²/4。由此,直接插入排序的时间复杂度为O(n²)。