【学习笔记】我的C++排序算法

本文是关于C++中常见排序算法的学习笔记,包括计数排序、冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序以及两种遍历算法——深度优先和广度优先。详细介绍了每种排序算法的思想和应用场景,如计数排序适用于成绩排序等固定范围的数据。
摘要由CSDN通过智能技术生成
1、计数排序

场景:要求对学生成绩进行排序,而且相同成绩的顺序保持不变

/**
*@arr表示学生成绩的数组
*@maxVal表示成绩最高分(也可以是学生总人数,此时需要判断最高分)
*追求尽可能低的时间复杂度
*学生成绩在0~100分之间
*/

首先判断稳定排序有冒泡 O ( n 2 ) O(n^2) O(n2))、插入 O ( n 2 ) O(n^2) O(n2))、归并 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)))、计数 O ( n + k ) O(n+k) O(n+k))、 O ( n + k ) O(n+k) O(n+k))、基数 O ( n ∗ k ) O(n*k) O(nk))排序这么几种。由于成绩的范围确定,所以这里优先选择计数排序。

class solution {
   
public:
	void CountSort(vector<int> &arr, int maxVal){
   
	    if(arr.size() == 0) return;
	
	    vector<int> count(maxVal + 1, 0);    ///初始化maxVal+1大小的数组
	    vector<int> tmp(arr);	// 保存arr的一个副本
	
	    for(auto x : arr)   /// 统计每个值的个数
	        count[x]++;
	/* *
	*  如果是给的总人数,那么可以在这个统计过程中去找最大值,
	*  vector<int> count(maxVal + 1, 0); 这一句就会放在找到
	* *最大值之后来初始化
	**/
	    for(int i = 1; i <= maxVal; i++)
	        count[i] += count[i - 1];   /// 计算比i小的元素的个数
	
	    for(int i = arr.size() - 1; i >=0; i--){
   
	        arr[count[tmp[i]] - 1] = tmp[i];	//将tmp[i]排序到正确位置
	        count[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值