直接插入排序
代码
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
using namespace std;
void Swap(vector<int>& arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 直接插入排序
void InsertSort(vector<int>& arr)
{
for (int i = 1; i < arr.size(); i++)
// 因为第一个数本身就有序,所以从i=1开始
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--)
{
// j从i-1开始,则最终最小可达0,即j>=0
// 若j从i开始,则最终仅可达1,即j>0
Swap(arr, j, j + 1);
}
}
void main()
{
vector<int> arr = vector<int>(10);
for (auto& elem : arr)
{
elem = rand()%101; // 生成0~100之间的随机数
}
// === 显示原无序数组 === //
cout << "原无序数组为:" << endl;
for_each(arr.begin(), arr.end(), [](const int& elem) { cout << elem << " "; }); // 用算法中的for_each进行数组的显示
cout << endl;
// === 直接插入排序 === //
InsertSort(arr);
// === 显示排序后的数组 === //
cout << "有序数组为:" << endl;
for_each(arr.begin(), arr.end(), [](const int& elem) { cout << elem << " "; });
cout << endl;
system("pause");
}
输出
直接插入排序的性质总结:
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2)
空间复杂度:
O
(
1
)
O(1)
O(1)
其运行效率与数组本身的有序程度有关。