C++:11种排序方法

本文详细探讨了C++中常见的11种排序方法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。通过实例解析,阐述每种排序算法的工作原理、效率和适用场景,帮助读者深入理解排序算法的内在逻辑。
摘要由CSDN通过智能技术生成
// 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] <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值