所有排序算法

【C++】排序算法 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序、桶排序、外排序 阅读详情
#include<iostream>
#include<stack>
using namespace std;
int a[] = {1,9,2,4,3 };


void my_print(int a[5])
{
for (int i = 0; i < 5; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
//插入排序算法
void insert(int a[5],int len)
{
int i = 1;

for (int i = 1; i < len; i++)
{
int key = a[i];
int index = i - 1;
while (key<a[index])
{
if (index == 0)
break;
a[index + 1] = a[index];
index--;
}
a[index+1] = key;


}
my_print(a);
}
//交换排序算法
void exchange(int a[5],int len)
{
int i = 0, j = 0;
for (i = 0; i < len - 1; i++)
{
int k = i;
while (a[k] > a[k + 1]&&k<len-1)
{
int temp = a[k];
a[k] = a[k + 1];
a[k + 1] = temp;
k++;
}
}
my_print(a);
}
void select(int a[5], int len)
{
int i = 0, j;
for (i = 0; i < len; i++)
{
int min = a[i ];
int index_min = i;
for (j = i + 1; j < len; j++)
{
if (a[j] < min)
{ 
min = a[j];
index_min = j;
}
}

a[index_min] = a[i];
a[i] = min;
}
my_print(a);
}
void combine(int a[5],int b[5],int left,int mid,int right)
{
cout << "left:" << left <<"mid:"<<mid<< "right:" << right << endl;
int i = left,j=mid+1;
int k = left;
while (i <= mid&&j <= right)
{
if (a[i] < a[j])
{
b[k] = a[i];
i++;
}
else {
b[k] = a[j];
j++;
}


k++;
}
while (i != mid + 1)
b[k++] = a[i++];
while (j != right + 1)
b[k++] = a[j++];
for (i = left; i <= right; i++)
a[i] = b[i];
}
void combine_sort(int a[5],int b[5],int left,int right)
{
if(left<right)
{ 
   int mid = (left + right) / 2;
combine_sort(a, b, left, mid);
combine_sort(a, b, mid + 1, right);
   combine(a, b, left, mid, right);
}
}
void quicksort(int a[5],int left,int right)
{
int key = a[left];
cout << "key:" << key << endl;
int i = left;
int j = right;
while (i < j)
{
while (i<j&&a[j]>key)
{
j--;
}
a[i] = a[j];
while (i <j&&a[i] < key)
{
i++;
}
a[j] = a[i];
}
a[i] = key;
if(left<i-1)
quicksort(a, left, i-1);
if(i+1<right)
quicksort(a, i + 1, right);

}
//快速排序的非递归
void stack_quicksort(int a[5], int left, int right)
{
stack<int> stack;
stack.push(left);
stack.push(right);
while (stack.empty()== false)
{
int r = stack.top();
stack.pop();
int l = stack.top();
stack.pop();
int key = a[l];
int i = l;
int j = r;
while (i < j)
{
while (i<j&&a[j]>key)
{
j--;
}
a[i] = a[j];
while (i <j&&a[i] < key)
{
i++;
}
a[j] = a[i];
}
a[i] = key;

if (l< i - 1)
{
stack.push(l);
stack.push(i - 1);
}
if (i + 1<r)
{ 
stack.push(i + 1);
stack.push(r);
}


}


}




void adjust(int a[5],int k,int len)
{
int temp = a[k];
cout << "temp:" << a[k] << endl;
int i = 0;
bool is = false;
while( (i = (2 * k))  <=len)
{
if (i+1 <=len&&a[i + 1] < a[i])
{
i++;
}
if (a[i] > temp)
{
is = true;
break;
}
a[k] = a[i];
k = i;
}
if (!is)
a[i/2] = temp;


}


void adjust2(int a[5], int k, int len)
{
int min = k;
int left = k * 2;
int right = k * 2 + 1;
if (left <= len&&a[left] < a[min])
{
min = left;
}
if (right <= len&&a[right] < a[min])
{
min = right;
}
if(a[min]<a[k])
{ 
   int temp = a[k];
   a[k] = a[min];
   a[min] = temp;
   adjust2(a, min, len);
}


}
void heap(int a[5],int len)
{
for (int i = len / 2; i >= 1; i--)
{
adjust2(a, i, len );
}

cout << a[1] << endl;
for (int j = len ; j > 1; j--)
{
a[1] = a[j];
cout << "a[j]:" << a[j] << endl;
adjust2(a,1, j);
cout << a[1] << endl;
}
cout << a[1] << endl;
}
int main()
{
//insert(a,5);
//exchange(a, 5);
//  select(a, 5);
//int b[5] ;
//combine_sort(a, b, 0, 4);
//quicksort(a, 0, 4);
//stack_quicksort(a, 0, 4);
//my_print(a);
heap(a, 4);
return 0;
}
排序算法:稳定的排序算法 元素,并围绕主元对列表进行分区,将较小的元素放入低数组中,将所有较大的元素放入高数组中。然后,我们对他们的第十位的值进行排序。因此,我们可以对任意大小的列表进行排序,而无需在冒泡排序中使用任何额外的空间。我们可以说,子问题可以被视为对数组的一部分进行排序,从任何索引 s(start) 开始,到任何索引 e(end) 结束。正如我们上面所讨论的,最大堆是一个完全二叉树,其中每个内部节点中的值都大于或等于该节点的子节点中的值。此外,每次迭代后,已排序子数组的大小都会增加,而未排序子数组的大小会减少。 阅读详情

相关推荐

八种排序算法

偶尔有看到排序算法,想起来大学里老师也有讲授过冒泡排序、快速排序等,不过现在已经没什么概念,一查发现排序算法有八种,有的甚至连名字都没听过,感概平时看的少。既然已经看到了,就干脆了解下基础概念,避免在后续学习途中,出现一看就懵逼的情况。   冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到...

dobat的博客 3348

一篇文章看懂所有排序方法(面试必备)

注意:本篇文章只是讲所有的排序逻辑和代码实现,完全掌握还需要自己手动敲出一遍甚至多遍代码 基本算法 插入排序 插入排序就是遍历两次数组,一次是前面的排序好的,一个是后面未排序的,将未排序的跟排序好的进行比较,如果比它大就放在它的位置就是从大到小排序,比他小放在它的位置就是从小到大排序,所以当需要遍历完所有的已排序数组的时候是最坏的情况,时间复杂度最坏的情况为o(n^2),最好的情况为o(n),即永远只需要遍历第一个就可以进行插入操作了 # 创建一个随机的数组作为输入 import random test_l

qq_45414803的博客 1243

排序算法总结及C++实现

文章目录1 引入 认识时间复杂度2 补充 对数器3 排序算法分析3.1 基于比较的排序3.1.1 冒泡排序3.1.2 选择排序3.1.3 插入排序3.1.4 归并排序补充题目 小和问题补充题目 逆序数3.1.5 快速排序3.1.6 堆排序3.2 非基于比较的排序3.2.1 计数排序3.2.2 桶排序3.2.3 基数排序4 排序总结4.1 稳定性4.2 工程中的综合排序算法4.3 有关排序...

李滚滚的博客 2223

排序算法——七种排序算法汇总,详细(Java)

七种排序算法汇总

xy199931的博客 2808

排序算法 - 面试中的排序算法总结

排序算法总结 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。 一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对

从零开始 2982

所有排序方法.zip

直接选择排序、堆排序、冒泡排序、快速排序、直接插入排序、折半插入排序、Shell排序、归并排序、桶式排序、基数排序

所有常见排序详解

2.3希尔排序(缩小增量排序) 3.选择排序 3.1基本思想 4.交换排序 4.1基本思想 4.3快速排序 4.3.2递归+三数取中+小区间优化 4.3.3非递归+三数取中 5.归并排序 5.1基本思想 5.3归并非递归 5.3.1为什么不能使用栈......

2021wuwei 2553

别再死记公式了!用TL072运放设计带通滤波器,调出干净正弦波的实战心得与误区盘点

本文分享了使用TL072运放设计带通滤波器的实战经验,重点解决波形失真问题,提供单电源供电优化、动态调谐技巧及仿真与现实的参数修正方法,帮助工程师调出纯净正弦波。内容涵盖模拟电路设计中的常见误区与解决方案,适合电子工程师和爱好者参考。

weixin_29172963的博客 404

【八大排序】一篇文章搞定所有排序

冒泡、选择、插入、希尔、堆、快速(递归、非递归)、归并(递归、非递归)、计数排序

weixin_69380220的博客 1845

RSA 2048/4096 签名校验算法

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能...

qq_38769551的博客 9499

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误

本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。

k5l6m的博客 224

十种排序方法

在C语言中,有多种排序算法可供选择,每种都有其独特的特点和应用场景。

ljw的博客 2171

setup time和hold time的计算

内容仅仅为了方便记忆,与原理无关

sddhyl的博客 7816

九大排序算法再总结

如果要转载,需要注明出处: http://blog.youkuaiyun.com/xiazdong 本文是 http://blog.youkuaiyun.com/xiazdong/article/details/7304239 的补充,当年看了《大话数据结构》总结的,但是现在看了《算法导论》,发现以前对排序的理解还不深入,所以打算对各个排序的思想再整理一遍。 本文首先介绍了基于比较模型的排序算法,

xiazdong 31万+

从FPGA工程师视角看CXP-12:如何用Xilinx GTX/GTH收发器搞定一条50Gbps的工业相机数据流?

本文从FPGA工程师视角详细解析了如何利用Xilinx GTX/GTH收发器实现50Gbps的CXP-12工业相机数据流传输。通过协议分析、硬件设计要点和FPGA逻辑实现,帮助开发者高效构建高带宽工业视觉系统,特别适合4K/8K高分辨率图像处理需求。

weixin_42533622的博客 282

赛豆科技 AIVA 汽车智能体架构演进面试题与答案

摘要 赛豆科技AIVA汽车智能体架构从座舱AI演进到整车智能体,最终实现自进化的超级智能体。其核心是"先有AI再有车"的理念,将AI作为产品主轴而非附加功能。架构设计采用端-边-云协同,确保低延迟响应;整车智能体通过Planner、Tool Registry等关键组件实现自主决策;自进化机制结合车端个性化学习和云端群体学习,并设置多重安全验证。多域协作采用分层架构,关键安全功能仍由确定性逻辑控制。该架构实现了从被动响应到主动服务的范式转变,使车辆能够持续进化。

AI天才研究院 122

「排序算法」十大经典排序算法

文章目录十大经典排序算法一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序 引用网站:菜鸟教程十大经典排序 十大经典排序算法 排序算法图片总结(图片来源于网络) 一、冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢

秋天,黄叶坠地,凉风有信。 6428

【异常】飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案

HTTP 401 是HTTP协议标准定义的未授权(Unauthorized)状态码,核心含义为请求方身份认证无效,服务端拒绝执行本次请求。飞书开放平台服务端对自建机器人的全链路鉴权校验失败。无论是机器人接收飞书事件推送的上行请求,还是机器人主动调用飞书开放平台API的下行请求,只要身份凭证无效、鉴权逻辑校验不通过,飞书服务端就会返回该报错,并最终透传到飞书客户端会话窗口中。

奶爸的编程之路,也就一周冷个三天 3761

【排序算法】排序算法总结

排序算法总结,将排序算法的分类、稳定性和特点进行一个总结,并附有跳转到对应详解的链接,方便大家学习

weixin_52811588的博客 985

【stata基础代码大全 】 可独立完成一篇实证

用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️。八、八.中介效应检验:路径分析(三种方法)第二种方法即Sobel-Goodman检验。*(7)Winsor处理,剔除异常值。六、内生性问题解决方法(附具体模型)其三,工具变量:两阶段最小二乘。第三种方法即Bootstrap检验。二、Stata中数据的基本处理。*(5)生成行业、年度虚拟变量。PSM1————近邻匹配。七、调节效应检验:机制分析。*(2)剔除数据中的样本。*(4)给变量添加标签。*(3)生成新的变量。*(6)基本数据匹配。

J_Giser的博客 8025

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

稳定排序算法有哪些

稳定排序算法有哪些 相信您已经掌握了很多种排序算法,比如冒泡排序、插入排序、希尔排序、选择排序等。这些排序算法中,有些是 “稳定” 的,有些是 “不稳定” 的。 给定的待排序序列中,经常会包含相同的元素,例如: 3 1 2 4 2 此序列中包含两个元素 2,为了区分它们,我们分别称它们为 “红 2” 和 “绿 2”。 评价一个排序算法是否稳定,是指该算法完成排序的同时,是否会改变序列中相同元素的相对位置。例如,上面序列中红 2 和绿 2 的相对位置是:红 2 位于绿 2 的左侧,或者说绿 2 位于红 2

ccc369639963的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是排序算法?常见的排序算法有哪些?

计数排序适用于数据范围较小且已知的情况,其时间复杂度为线性时间,非常适合处理小范围内的数据排序。基数排序适用于整数排序,特别是当数据范围较大但数据量适中时。它通过多次应用计数排序来实现多轮排序,从而克服了传统排序算法在处理大范围数据时的效率问题。

破损的天堂鸟博客 1226

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

十大经典排序算法

十种常见的排序算法可分为以下两大类: 比较类排序:通过比较来决定元素间的相对位置,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对位置,它可以突破基于比较排序的时间下限,以线性时间运行,因此也称为线性时间非比较类排序。 时间复杂度: 从序列的初始状态到经过排序算法的变换移位等操作变到最终排序好的结果状态的过程所花费的时间度量。

qq_40896594的博客 3672

排序算法总结

1.排序算法分类 基础的排序算法包含冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序及快速排序。 根据实现类型可分为插入排序类、选择排序类、交换排序类及归并排序类。 2.排序算法的综合分析 各算法的排序方式、平均情况、最好最坏情况、所需的辅助空间及稳定性如下: 事实上,排序算法没有十全十美,本来想写一套模拟测试的数据来验证孰优孰略。但是突然发现可比性不高,需要根据

黄俊彬 2541

十大排序算法

算法稳定性:单次比较后,两个值相等的邻近元素的位置在排序后,相对位置没有改变。

一名想做出点成就的后端~ 1429

排序算法详解

排序算法是计算机科学中最基础也最重要的算法之一。它将一组数据(例如数字列表、字符串集合)按照特定的顺序(升序或降序)重新排列。高效的排序算法对于优化其他算法(如搜索和合并算法)的效率至关重要。

m0_54069809的博客 1169
上一篇: 5.6 Column Attribute
下一篇: HOJ 1020
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值