// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
排序算法(升序):
1、插入排序
1)01 √ 插入
查找插入位置
2)02 √ 折半插入
快速查找插入位置
3)03 √ 希尔
不同步长分部排序
2、交换排序
1)04 √ 冒泡
每次确定一个极数的位置
2)05 √ 快速
每次确定一个选择的数的位置
3、选择排序
1)06 √ 选择
找到最小值交换位置
2)07 √ 堆排序
建大根堆,取堆顶后调整堆
4、其他排序
1)08 √ 归并排序
分治合并
2)09 √ 基数排序
从小位到大位分桶
3)10 √ 计数排序
单一值存桶
4)11 √ 桶排序
区间值存桶
*/
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void printArr(vector<int>& arr) {
cout << std::right << setfill('0');
for (auto i : arr) {
cout << setw(2) << i << ' ';
}
cout << endl;
cout << setfill(' ');
}
void printName(string s) {
cout << endl << std::left << setw(20) << s;
}
void generate(vector<int>& arr, int n) {
printName("generate");
while (n--)
{
//arr.push_back(rand() % 100);
arr.push_back(rand());
}
}
//=======================================================================
void insertSort(vector<int> arr) {
printName("insertSort");
int n = arr.size();
for (int i = 1; i < n; i++)
{
int idx = i - 1;
int cur_val = arr[i];
while (idx >= 0 and arr[idx] > cur_val)
{
arr[idx + 1] = arr[idx];
idx--;
}
arr[idx + 1] = cur_val;
}
printArr(arr);
}
void halfInsertSort(vector<int> arr) {
printName("halfInsertSort");
int n = arr.size();
for (int i = 1; i < n; i++)
{
int curVal = arr[i];
//查找
int left = 0, right = i - 1;
while (left <= right)
{
int mid = (left + right) >> 1;
//跳出时保证right对应的值一定小于curVal
if (arr[mid] <
C++:11种排序方法
最新推荐文章于 2024-07-02 09:36:23 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)