- 概念:
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一一个新的有序序列。
- 核心思想:
将数组中的所有元素依次跟前面已经排好的元素相比较,将本轮选择的元素a[end+1]与已经排好序的元素a[end](一开始相当于第一个元素已排过序)相比较。如果:a[end]>a[end+1],即如果已经排序的元素比选择的元素大,则将二者交换,直到选择的数据和已经排好序的全部元素都比较过,再让end++,用同样的方法,比较其他的数,直到所有数字都有序,排序结束。
- 具体代码:
#include <stdio.h>
#include <stdlib.h>
void InsertSort(int* a, int n)//插入排序
{
for (int i = 0; i < n-1; i++)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0 && a[end] > tmp)
{
a[end + 1] = a[end];
end--;
}
a[end + 1] = tmp;
}
}
void SortTest()
{
int a[10] = { 5, 2, 4, 6, 1, 3, 8, 7, 9,0 };
int sz = sizeof(a) / sizeof(a[0]);
printf("插入排序:>");
InsertSort(a, sz);
PrintArray(a, sz);
}
int main()
{
SortTest();
system("pause");
return 0;
}
- 直接插入排序总结:
1.元素集合越接近有序,直接插入排序算法的时间效率越高
2.时间复杂度: O(N^2)
3.空间复杂度: 0(1),它是一种稳定的排序算法
4.稳定性:稳定