|
|
|
@ -0,0 +1,38 @@
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
int a[1000];
|
|
|
|
|
int i, j, t, n;
|
|
|
|
|
scanf_s("%d", &n);//输入要排序的数的个数
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < n; ++i)//输入要排序的数
|
|
|
|
|
scanf_s("%d", a + i);
|
|
|
|
|
|
|
|
|
|
for (i = 1; i < n; ++i)
|
|
|
|
|
{
|
|
|
|
|
t = a[i];
|
|
|
|
|
for (j = i - 1; j > -1 && a[j] > t; j--)
|
|
|
|
|
{
|
|
|
|
|
a[j + 1] = a[j];
|
|
|
|
|
}
|
|
|
|
|
a[j + 1] = t;
|
|
|
|
|
|
|
|
|
|
for (j = 0; j < n; ++j)
|
|
|
|
|
printf("%-5d", a[j]);
|
|
|
|
|
printf("\n\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//时间复杂度
|
|
|
|
|
//在插入排序中,当待排序序列是有序时,是最优的情况,时间复杂度为O(n)。
|
|
|
|
|
//最坏的情况是待排序数组是逆序的,时间复杂度为O(n2)。
|
|
|
|
|
//插入排序在平均情况运行时间与最坏情况运行时间一样,是O(n2)。
|
|
|
|
|
|
|
|
|
|
//适用场景
|
|
|
|
|
//待排序序列的元素个数不多(<=50),且元素基本有序。
|
|
|
|
|
|
|
|
|
|
//时间小于1s
|
|
|
|
|
|
|
|
|
|
//插入排序的思想:将初始数据分为有序部分和无序部分,每一步将一个无序部分的数据插入到前面已经排好序的有序部分中,直到插完所有元素为止。
|