一:插入排序
1.1直接插入排序(Straight Insertion Sort)
-
理解:就是将后面的数,与前面的数依次比较,找到合适的位置,直接插入;
-
基本思想:
把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
-
时间复杂度是 O ( N 2 ) O(N^2) O(N2);
-
直接插入排序稳定性
直接插入排序是稳定的算法,它满足稳定算法的定义。
算法稳定性 – 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!
/*直接插入排序
按照小的在前,大的在后
*/
void straight_insertion_sort(int *a, const int& length)
{
int i = 0, j = 0, k = 0;
int temp = 0;
for (i = 1; i < length; ++i)
{
for (j = 0; j < i; ++j)
{
if (a[i] < a[j])
{
break;
}
}
if (j != i)
{
temp = a[i];
for (k = i; k > j; --k)
{
a[k] = a[k - 1];
}
a[k] = temp;
}
}
return;
}
int main()
{
int a[6] = { 20,19,18,17,16 ,15 };
int b[6] = { 20,30,40,10,60 ,50 };
straight_insertion_sort(b, 6);
for (int i : a) {
cout << i << endl;
}
return 0;
}
参考链接: https://www.cnblogs.com/skywang12345/p/3596881.html