🎊 算法【排序】 | 桶排序(附图解、代码)
🎊 算法【排序】 | 堆排序(附图解、代码)
🎊 算法【排序】 | 快速排序 【荷兰问题】(附代码、图解)
🎊 算法【排序】 | 归并排序【排序、逆序对、小和问题】(附图解、代码)
🎊 算法【排序】 | 插入排序(附图解、代码)
简介
- 插对于
少量元素
的排序,它是一个有效
的算法,插入排序是一种最简单
的排序方法。- 它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
时间复杂度
时间复杂度:O(n2);
空间复杂度
空间复杂度:O(1);
优缺点
相对少量的元素,较为有效;
过程
图解
- 依次保持
0~n
间的次序;
代码
/*----------------------------------------------------------------------
> File Name: insertSort.cpp
> Author: Jxiepc
> Mail: Jxiepc
> Created Time: Sat 29 Jan 2022 10:47:31 AM CST
----------------------------------------------------------------------*/
#include <iostream>
#include <vector>
void swap(std::vector<int>& vc, int l, int r) {
vc[l] = vc[l] ^ vc[r];
vc[r] = vc[l] ^ vc[r];
vc[l] = vc[l] ^ vc[r];
}
void insertSort(std::vector<int>& vc) {
if(vc.size() < 2)
return;
for(int i=1; i<vc.size(); ++i) {
for(int j=i-1; j>=0 &&vc[j] > vc[j+1]; j--) {
swap(vc, j, j+1);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> vc;
vc.push_back(9);
vc.push_back(3);
vc.push_back(5);
vc.push_back(1);
vc.push_back(2);
std::cout << "排序前";
for(auto& i:vc)
std::cout << i << " ";
std::cout << std::endl;
insertSort(vc);
std::cout << "排序后";
for(auto& i:vc)
std::cout << i << " ";
std::cout << std::endl;
return 0;
}