十大排序算法归纳

目录

排序算法的分类

插入排序算法模板

选择排序算法模板

冒泡排序算法模板

希尔排序算法模板

快速排序算法模板

归并排序算法模板

堆排序算法模板

基数排序算法模板

计算排序算法模板

桶排序算法模板


排序算法的分类

  • 插入:插入,折半插入,希尔
  • 交换:冒泡,快速
  • 选择:简单选择,堆
  • 归并:归并(不只二路归并)
  • 基数:

插入排序算法模板

代码如下:

void insert_sort()
{for (int i = 1; i < n; i ++ ){int x = a[i];int j = i-1;while (j >= 0 && x < a[j]){a[j+1] = a[j];j -- ;}a[j+1] = x;}
}

选择排序算法模板

代码如下:

void select_sort()
{for (int i = 0; i < n; i ++ ){int k = i;for (int j = i+1; j < n; j ++ ){if (a[j] < a[k])k = j;}swap(a[i], a[k]);}}

冒泡排序算法模板

代码如下:

void bubble_sort()
{for (int i = n-1; i >= 1; i -- ){bool flag = true;for (int j = 1; j <= i; j ++ )if (a[j-1] > a[j]){swap(a[j-1], a[j]);flag = false;}if (flag) return;}
}

希尔排序算法模板

代码如下:

void shell_sort()
{for (int gap = n >> 1; gap; gap >>= 1){for (int i = gap; i < n; i ++ ){int x = a[i];int j;for (j = i; j >= gap && a[j-gap] > x; j -= gap)a[j] = a[j-gap];a[j] = x;}}
}

快速排序算法模板

代码如下:

void quick_sort(int l, int r)
{if (l >= r) return ;int x = a[l+r>>1], i = l-1, j = r+1;while (i < j){while (a[++ i] < x);while (a[-- j] > x);if (i < j) swap(a[i], a[j]);}sort(l, j), sort(j+1, r);
}

归并排序算法模板

代码如下:

void merge_sort(int l, int r)
{if (l >= r) return;int temp[N];int mid = l+r>>1;merge_sort(l, mid), merge_sort(mid+1, r);int k = 0, i = l, j = mid+1;while (i <= mid && j <= r){if (a[i] < a[j]) temp[k ++ ] = a[i ++ ];else temp[k ++ ] = a[j ++ ];}while (i <= mid) temp[k ++ ] = a[i ++ ];while (j <= r) temp[k ++ ] = a[j ++ ];for (int i = l, j = 0; i <= r; i ++ , j ++ ) a[i] = temp[j];
}

堆排序算法模板

须知此排序为使用了模拟堆,为了使最后一个非叶子节点的编号为n/2,数组编号从1开始

参考文章:https://www.cnblogs.com/wanglei5205/p/8733524.html

void down(int u)
{int t = u;if (u<<1 <= n && h[u<<1] < h[t]) t = u<<1;if ((u<<1|1) <= n && h[u<<1|1] < h[t]) t = u<<1|1;if (u != t){swap(h[u], h[t]);down(t);}
}int main()
{for (int i = 1; i <= n; i ++ ) cin >> h[i];for (int i = n/2; i; i -- ) down(i);while (true){if (!n) break;cout << h[1] << ' ';h[1] = h[n];n -- ;down(1);}return 0;
}

基数排序算法模板

代码如下:

int maxbit()
{int maxv = a[0];for (int i = 1; i < n; i ++ )if (maxv < a[i])maxv = a[i];int cnt = 1;while (maxv >= 10) maxv /= 10, cnt ++ ;return cnt;
}
void radixsort()
{int t = maxbit();int radix = 1;for (int i = 1; i <= t; i ++ ){for (int j = 0; j < 10; j ++ ) count[j] = 0;for (int j = 0; j < n; j ++ ){int k = (a[j] / radix) % 10;count[k] ++ ;}for (int j = 1; j < 10; j ++ ) count[j] += count[j-1];for (int j = n-1; j >= 0; j -- ){int k = (a[j] / radix) % 10;temp[count[k]-1] = a[j];count[k] -- ;}for (int j = 0; j < n; j ++ ) a[j] = temp[j];radix *= 10;}}

计算排序算法模板

代码如下:

void counting_sort()
{int sorted[N];int maxv = a[0];for (int i = 1; i < n; i ++ )if (maxv < a[i])maxv = a[i];int count[maxv+1];for (int i = 0; i < n; i ++ ) count[a[i]] ++ ;for (int i = 1; i <= maxv; i ++ ) count[i] += count[i-1];for (int i = n-1; i >= 0; i -- ){sorted[count[a[i]]-1] = a[i];count[a[i]] -- ;}for (int i = 0; i < n; i ++ ) a[i] = sorted[i];
}

桶排序算法模板

基数排序是桶排序的特例,优势是可以处理浮点数和负数,劣势是还要配合别的排序函数

vector<int> bucketSort(vector<int>& nums) {int n = nums.size();int maxv = *max_element(nums.begin(), nums.end());int minv = *min_element(nums.begin(), nums.end());int bs = 1000;int m = (maxv-minv)/bs+1;vector<vector<int> > bucket(m);for (int i = 0; i < n; ++i) {bucket[(nums[i]-minv)/bs].push_back(nums[i]);}int idx = 0;for (int i = 0; i < m; ++i) {int sz = bucket[i].size();bucket[i] = quickSort(bucket[i]);for (int j = 0; j < sz; ++j) {nums[idx++] = bucket[i][j];}}return nums;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311853.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历&#xff0c;希望能给大家带来一点点启发&#xff01; 阿七毕业于上海一所大学的管理学院&#xff0c;在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看&#xff0c;也很庆幸这次考研失利&#xff0c;因为这个时候对社会一…

linux go环境安装 swag

下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的go-swagger包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外&#xff0c;$GOPATH/bin下 已经有了sw…

基于CMake的大型C++工程组织

此文适合大型C工程&#xff0c;涉及到多个自定义库&#xff0c;多个第三方库&#xff0c;以及还有给第三方用户进行二次开发的需求下&#xff0c;应对这种复杂编译环境下的工程组织方式的一些经验介绍&#xff0c;希望给大型工业软件的开发者一些参考 一个大型工程&#xff0c…

数据结构—树的应用

文章目录 11.树的应用(1).Huffman树#1.加权外部路径长度#2.Huffman算法#3.Huffman编码 (2).二叉搜索树#1.基本定义#2.查找#3.插入结点#4.构建树#5.查找最小值和最大值#6.删除结点#7.一个问题 (3).平衡搜索树#1.满二叉树、完全二叉树和丰满二叉树#2.平衡因子和平衡树#3.左旋与右…

图像中的傅里叶变换及低通与高通滤波

傅里叶变换 高频&#xff1a;在图像中变化剧烈的灰度分量&#xff0c;如边界。 低频&#xff1a;在图像中变化缓慢的灰度分量。 OpenCV中函数为cv2.dft()和cv2.idft()&#xff0c;输入图像要先转换成np.float32格式。得到的结果频率为0的部分会在左上角&#xff0c;为方便处理…

【ROS2】MOMO的鱼香ROS2(二)ROS2入门篇——ROS2初体验

ROS2初体验 引言专业术语认识1 认识ROS21.1 ROS2版本对照表1.2 ROS与ROS2对比1.3 ROS2架构1.3.1 DDS实现层1.3.2 ROS中间件接口&#xff08;RMW&#xff09;1.3.3 ROS2客户端库 RCL 2 安装ROS22.1 ROS安装&#xff08;一键式&#xff09;2.2 手动安装ROS22.2.1 添加ROS软件源2.…

FPGA-DE2-115-实验二-模块化多功能数字钟

模块化多功能数字钟 1.实验要求2.实现过程多功能数字钟的整体RTL视图2.1 顶层模块clock2.2 按键消抖模块key_filiter2.3 数字钟1s/10ms时钟产生模块clk2.4 时间显示(模式0)与调整模块(模式3)clockdisplay2.5 计时(模式1)模块keeptime2.6 闹钟调整(模式2)模块alarmclock2.7 数码…

Unity中URP下精度修饰符real

文章目录 前言一、real是什么&#xff1f;1、我们在项目的Packages下找到如下文件&#xff1a;2、HAS_HALF(1代表有half精度&#xff0c;0代表没有half精度)3、PREFER_HALF4、REAL_IS_HALF5、如果 real is half6、否则为float 二、总结 前言 在使用雾效时&#xff0c;ComputeFo…

TCP服务器的编写(下)

我们现在开始对我们的客户端开始封装 我们的客户端&#xff0c;创建完套接字&#xff0c;需不需要bind呢&#xff1f;&#xff1f; 当然是不需要的&#xff0c;你本身是一个客户端&#xff0c;其他人写的应用也可能是客户端&#xff0c;如果我们bind&#xff0c;一定意味着我们…

2023年03月10日_GPT4发布前的一些消息

2023年3月10日 最近科技圈的消息感觉都要爆炸了 我们都知道 如今爆火的ChatGPT 是在GPT3.5的基础上改进得来的 而OpenAI很早就预告 GPT-4将会在今年发布 不过最近各家大厂争相入局的行动 似乎加快了这个进程 最新消息是 万众期待的GPT-4将于下周推出 在3月9日 微软德…

linux驱动(一):led

本文主要探讨210的led驱动相关知识。 驱动 操作系统驱动硬件的代码,驱动上层是系统调用API,下层是硬件 宏内核&#xff1a;内核整体上为一个过程实现,运行在同一地址空间,相互调用简单高效 微内核&#xff1a;功能为独立过程,过程间通过IPC通信 …

【链表OJ—链表的回文结构】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…