基本思想
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一
个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。
在实际生活中,就好比我们打扑克牌一样,每接一张牌将他插入合适位置
实现思路
实现代码
1.升序
//直接插入排序
#include<iostream>
using namespace std;
#include<vector>
void InsertSort(vector<int>& a, int n)
{
for (int i = 0; i<n - 1; i++)
{
int end=i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end + 1] = tmp;
}
}
int main()
{
int n;
cin >> n;
vector<int> a;
while (n--)
{
int k;
cin >> k;
a.push_back(k);
}
InsertSort(a, a.size());
for (auto e : a)
{
cout << e << " ";
}
return 0;
}
2.降序
#include<iostream>
using namespace std;
#include<vector>
//插入排序
void InsertSort(vector<int>& a, int n)
{
for (int i = 0; i<n - 1; i++)
{
int end=i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] < tmp)
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end + 1] = tmp;
}
}
int main()
{
int n;
cin >> n;
vector<int> a;
while (n--)
{
int k;
cin >> k;
a.push_back(k);
}
InsertSort(a, a.size());
for (auto e : a)
{
cout << e << " ";
}
return 0;
}
总结
1. 元素集合越接近有序,直接插入排序算法的时间效率越高
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:稳定