十大排序算法归纳

目录

排序算法的分类

插入排序算法模板

选择排序算法模板

冒泡排序算法模板

希尔排序算法模板

快速排序算法模板

归并排序算法模板

堆排序算法模板

基数排序算法模板

计算排序算法模板

桶排序算法模板


排序算法的分类

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

插入排序算法模板

代码如下:

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.rhkb.cn/news/228491.html

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

相关文章

网站显示不安全警告怎么办?消除网站不安全警告超全指南

网站显示不安全警告怎么办&#xff1f;当用户访问你的网站&#xff0c;而您的网站没有部署SSL证书实现HTTPS加密时&#xff0c;网站就会显示不安全警告&#xff0c;这种警告&#xff0c;不仅有可能阻止用户继续浏览网站&#xff0c;影响网站声誉&#xff0c;还有可能影响网站在…

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蜉蝣优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运…

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束&#xff0c;2024即将开启&#xff0c;每年这个时候&#xff0c;都会简单总结下自己这一年&#xff0c;既是对今年的一个复盘和回顾&#xff0c;也是对新一年的向往和期待。 我的2023年&#xff0c;大概分为 「个人」&#xff0c;「家庭」&#xff0c;「团队」…

C语言实现RSA算法加解密

使用c语言实现了RSA加解密算法&#xff0c;可以加解密文件和字符串。 rsa算法原理 选择两个大素数p和q&#xff1b;计算n p * q;计算φ(n)(p-1)(q-1)&#xff1b;选择与φ(n)互素的整数d&#xff1b;由de1 mod φ(n)计算得到e&#xff1b;公钥是(e, n), 私钥是(d, n);假设明…

设计模式(4)--对象行为(11)--访问者

1. 意图 表示一个作用于某对象结构中的各元素的操作。 使你可以在不改变各元素的类的前提下定义于作用于这些元素的新操作。 2. 五种角色 抽象访问者(Visitor)、具体访问者(Concrete Visitor)、抽象元素(Element)、 具体元素(Concrete Element)、对象结构(ObjectStructure) 3…

12 HAL库的硬件SPI驱动数码管

引言&#xff1a; 本文将为大家介绍一下SPI&#xff0c; 数码管的知识&#xff0c; 以及HAL库驱动SPI接口的数码的代码示例。 一、SPI的基础知识 1. SPI简介 01 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写 02 是美国摩托罗拉公司&#xff08…

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操…

微信小程序开发系列-11组件间通信02

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

打破数据孤岛:ChatGPT如何打通金融大数据的任督二脉?

文章目录 一、引言二、ChatGPT与金融大数据分析的融合三、实践应用&#xff1a;ChatGPT在金融大数据分析中的优势与挑战四、案例分析&#xff1a;ChatGPT在金融大数据分析中的应用案例五、前景展望&#xff1a;ChatGPT在金融大数据分析领域的未来发展《AI时代Python金融大数据分…

[新版Hi3531DV200 性能强悍]

新版Hi3531DV200 性能强悍 Hi3531DV200是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;DVR产品应用开发的新一代专业SoC芯片。Hi3531DV200集成了ARM A53四核处理器和性能强大的神经网络推理引擎&#xff0c;支持多种智能算法应用。同时&#xff0c;Hi3531DV200还…

maven工具的搭建以及使用

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;首先进行maven工具的搭建&#x1f993;1.[打开下载 maven 服务器官网](http://maven.apache.org)&#x1fa85;2.解压之后&#xff0c;配置环境变量&#x1f3e8;3.打开设…

【SpringBoot开发】之商城项目案例(实现登陆版)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

【Android Gradle 插件】Android Plugin DSL Reference 离线文档下载 ( GitHub 下载文档 | 查看文档 )

一、Android Plugin DSL Reference 文档下载 二、Android Plugin DSL Reference 文档查看 一、Android Plugin DSL Reference 文档下载 在之前的博客 【Android Gradle 插件】Android Plugin DSL Reference 文档介绍 ( 1.2 ~ 3.4 版本文档地址 | 4.1 ~ 7.1 版本文档地址 ) 中…

ffmpeg两种windows版本区别说明

版本一 必须拷贝exe和dll文件才能使用&#xff0c;如果缺少dll则exe不正正常执行 如果缺少dll &#xff0c;执行 exe会报错如下 版本2 直接拷贝exe就能使用&#xff0c;没有依赖的环境

uniapp实现前端银行卡隐藏中间的数字,及隐藏姓名后两位

Vue 实现前端银行卡隐藏中间的数字 主要应用了 filters过滤器 来实现效果 实现效果&#xff0c;如图&#xff1a; <template><div><div style"background-color: #f4f4f4;margin:50px 0 0 460px;width:900px;height:300px;"><p>原来&#…

Android 13 动态启用或禁用IPV6

介绍 客户想要通过APK来控制IPV6的启用和禁用&#xff0c;这里我们通过广播的方式来让客户控制IPV6。 效果展示 adb shell ifconfig 这里我们用debug软件&#xff0c;将下面节点置为1 如图ipv6已被禁用了 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 修改 接下来…

老虎目标检测数据集VOC格式900张

老虎是地球上最为壮丽而令人敬畏的野生动物之一&#xff0c;是大型猫科动物中的一员。老虎通常具有强壮的体格和敏捷的身体机能&#xff0c;是世界上最顶级的掠食者之一。 老虎的外貌特征鲜明&#xff0c;身体长约2至3米&#xff0c;体重可达200至300公斤。它们的体型庞大&…

Kubernetes 学习总结(41)—— 云原生容器网络详解

背景 随着网络技术的发展&#xff0c;网络的虚拟化程度越来越高&#xff0c;特别是云原生网络&#xff0c;叠加了物理网络、虚机网络和容器网络&#xff0c;数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器…

2023下半年的总结

我从八月下旬开始写的&#xff0c;到现在差不多有半年了&#xff0c;总结一下吧&#xff01; 1.计算机视觉 在计算机视觉方面&#xff0c;想必两个有名的深度学习框架&#xff08;TensorFlow和PyTorch&#xff09;大家都很清楚吧&#xff0c;以及OpenCV库。对于人脸识别&…