排序

快排伪代码 一、单向扫描法: #include<stdio.h> #include<iostream> using namespace std; void quickSort(int arr[],int p,int r){ int partition(int arr[],int p,int r); if(p<r){ int q=partition(arr,p,r); quickSort(arr,p,q-1); quickSort(arr,q+1,r); } } v 阅读详情

#include

using namespace std;
class Sort {
public:
Sort (int r[],int n); //构造函数,生成待排序序列
~Sort();//析构函数
void InsertSort();//直接插入排序
void ShellSort();//希尔排序
void BubbleSort();//起泡排序
void QuickSort (int first,int last); //快速排序
void SelectSort();//简单选择排序
void Print();//输出序列
private:
int Partition (int first,int last); //快速排序,一次划分
int *data;//待排序序列
int length;
};
Sort::Sort (int r[],int n) {
data=new int[n];
for (int i=0; i<n; i++) {
data[i]=r[i];
length=n;
}
}
Sort::~Sort() {
delete[] data;
}
void Sort::Print() {
for (int i=0; i<length; i++) {
cout<<data[i]<<" ";
}
}
void Sort::InsertSort() {
int i,j,temp;
for (i=1; i<length; i++) {
temp=data[i];//暂存待插入记录
for (j=i-1; j>=0&&temp<data[j]; j–) { //寻找插入位置
data[j+1]=data[j];
}
data[j+1]=temp;
}
}
void Sort::ShellSort() {
int temp,d,i,j;
for (d=length/2; d>=1; d=d/2) { //增量为d进行直接插入排序
for (i=d; i<length; i++) { //进行一趟希尔排序
temp=data[i];//暂存待插入记录
for (j=i-d; j>=0&&temp<data[j]; j=j-d) {
data[j+d]=data[j];//记录后移d个位置
}
data[j+d]=temp;
}
}
}
void Sort::BubbleSort() {
int j,exchange,bound,temp;
exchange=length-1;//第一趟起泡排序区间是[0~length-1]
while (exchange!=0) {
bound=exchange;
exchange=0;
for (j=0; j<bound; j++) //一趟起泡的区间是[0~bound]
if (data[j]>data[j+1]) {
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
exchange=j;//记载每一次记录交换的位置
}
}
}
int Sort::Partition (int first,int last) {
int i=first,j=last,temp;//初始化一次划分的区间
while (i<j) {
while (i<j&&data[i]<=data[j]) { //右侧扫描
j–;
}
if (i<j) {
temp=data[i];
data[i]=data[j];
data[j]=temp;
i++;
}
while (i<j&&data[i]<=data[j]) { //左侧扫描
i++;
}
if (i<j) {
temp=data[i];
data[i]=data[j];
data[j]=temp;
j–;
}
}
return i;//i为轴值记录的最终位置
}
void Sort::QuickSort (int first,int last) {
if (first>=last)
return;//区间长度为1,递归结束
else {
int pivot=Partition (first,last); //一次划分
QuickSort (first,pivot-1); //对左侧子序进行快速排序
QuickSort (pivot+1,last); //对右侧子序进行快速排序
}
}
void Sort::SelectSort() {
int i,j,index,temp;
for (i=0; i<length-1; i++) { //进行length-1趟简单选择排序
index=1;
for (j=i+1; j<length; j++) { //在无序区中选取最小记录
if (data[j]<data[index])
index=j;
}
if (index!=i) {
temp=data[i];
data[i]=data[index];
data[index]=temp;
}
}
}
int main() {
int select,r[10]= {12,15,11,17,19,14,13,16,15,18};
Sort s (r,10);
cout<<“1.直接插入排序 2.希尔排序”<<endl;
cout<<“3.起泡排序 4.快速排序”<<endl;
cout<<“5.简单选择排序”<<endl;
cout<<“请输入需要使用的排序方法:”;
cin>>select;
switch (select) {
case 1:
s.InsertSort();
break;
case 2:
s.ShellSort();
break;
case 3:
s.BubbleSort();
break;
case 4:
s.QuickSort(0,9);
break;
case 5:
s.SelectSort();
break;
default:
cout<<“输入排序编号错误”<<endl;
break;
}
s.Print();
return 0;
}

【常见的六大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序 在实现排序前,我们要先知道什么是排序。排序:简单的来说就是把一串数据按照一定的方式依次排序。例如:可以按照数字的大小升序或降序排列,或者按照英文字母的先后顺序排列等。使用这一系列的方式,就可以将一串无序状态下的数据排列成有序的数据。 阅读详情

相关推荐

七大排序算法:插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序

史上最全的排序讲解

元清的博客 7915

常见排序算法之快速排序原理及递归非递归版本代码

目录快速排序原理复杂度分析选择排序代码1.递归版本2.非递归版本测试及结果测试结果 快速排序原理 之前介绍过三种基础的排序算法以及它们之间的比较:冒泡排序,选择排序和直接插入排序,我们知道它们的时间复杂度都是O(n2),那是不是所有的算法的时间复杂度都是O(n2)呢?当然不是!下面我们介绍的快速排序之所以叫快速排序就是因为目前已有的排序算法中,快速排序的时间复杂度是最小的。 快速排序的基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可以分别对这两部分记录继续进行排

JM-Nie的博客 776

第二十届全国大学生智能汽车竞赛极速光电组:MicroPython与恩智浦RT1021的硬件编程实战指南

本文为参加第二十届全国大学生智能汽车竞赛极速光电组的同学提供了一份详尽的MicroPython与恩智浦RT1021硬件编程实战指南。文章深入剖析了选择MicroPython与RT1021这对组合的优势,详细讲解了从开发环境搭建、基础硬件控制(如GPIO、PWM、编码器、CCD)到系统集成(平衡控制、循迹算法)与多任务调试的全过程,旨在帮助参赛者降低嵌入式开发门槛,高效备赛。

wdx0123456的博客 846

快速排序递归与非递归实现

算法概述:分而治之。选出一个元素作为主元,它可以把集合中的元素分成两部分,一部分都是大于它的,一部分都小于它的。我们先用伪代码描述。void QuickSort(ElementType A[],int N) { //如果只剩一个元素了直接返回 if(N<2) return; pivot=从A[]选出一个主元; 将S={ A[]\pivot }分成两个独立的子集; A

_今已亭亭如盖矣 856

MeshLab新手必看:5分钟搞定泊松表面重建(附完整点云处理流程)

本文详细介绍了如何使用MeshLab进行泊松表面重建,从点云数据导入、预处理到核心参数设置,再到后处理与模型优化,提供了完整的3D重建流程指南。特别适合计算机视觉和3D重建领域的新手快速掌握泊松重建技术,提升工作效率。

kafka6courier的博客 230

ZBrush 2021来了

这次给大家带来的是:zbrush2021.1.1 win安装教程 1.下载压缩包之后解压到文件夹当中,然后打开ZBrush_2021_Installer.exe进行软件安装, 如下图 2.在这里我们保持默认的简体中文版即可,然后点击确认,如下图 3.第三步我们点击前进即可,如下图 4.第四步我们来到许可协议,在这里我们点击我接受此协议,然后点击前进,如下图 5.第五步我们来到安装目录,在这里我们可以设置安装路径,如下图 6.在这里我将安装目录修改安装到E盘为例,然后点击下一

3D游戏建模 1188

快速排序非递归优化c语言,快速排序算法的几种实现的性能对比:递归实现和非递归实现 | 王成文的个人站点...

本文对快速排序的几种实现进行速度分析。首先根据《算法导论》p85提供的伪代码有如下快速排序的实现:0102030405060708091011121314151617181920212223242526int partition(int *a,int start,int end){int x = a[end];int i = start-1;int j=start;for (int j = sta...

weixin_42501785的博客 522

【破局之道】LangChain4j 0.31.0 + Java 8 + Spring Boot:在“过时”环境中构建本地大模型应用的实战指南

本文为使用Java 8和Spring Boot等“过时”技术栈的团队提供了构建本地大模型应用的实战指南。通过采用LangChain4j 0.31.0这一兼容版本,结合Ollama部署本地大模型,开发者无需升级JDK即可在现有项目中快速集成AI能力,实现智能问答、文档摘要等功能,为传统项目注入创新活力。

t4y5u6i7o的博客 557

快速排序----非递归

我们以前写快排都是写递归的。 #include #include #include #include #include #include using namespace std; template int partition(vector &vec,int low,int high) { Comparable pivot=vec[low]; //任选元素作为轴,这里选首元素

Life Coding 2955

避坑指南:PyCINRAD处理CINRAD雷达数据时遇到的5个典型报错及解决方案

本文针对使用PyCINRAD库处理CINRAD雷达基数据时常见的5个典型报错,提供了详细的解决方案。内容涵盖环境配置、数据读取、PPI可视化及性能优化等核心环节,重点解决了版本兼容性、数据异常处理和中文乱码等实际问题,帮助用户高效处理雷达基数据并生成准确的PPI图像。

cc789的博客 1068

【QCA6174】QCA6174 DFS认证的时候会有概率信道不会跳转的情况,通常跳转成功概率只有25%问题分析及解决方案

Master设备需要测试的项目。

wgl307293845的博客 752

六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

文章目录:1. 插入排序2.希尔排序 1. 插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素 5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置 6.重复步骤2~5 动图演示如下: 思路:   在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个

HanMeng的博客 69万+

9.1 机器人动力学建模

目录9.1 机器人动力学建模一、机器人动力学的基本概念1. 什么是机器人动力学?2. 动力学方程二、机器人动力学建模方法1. 拉格朗日方法2. 牛顿-欧拉方法三、Simulink 中的机器人动力学建模1. 使用 Simscape Multibody 建模示例:构建一个两连杆机械臂的动力学模型。步骤:2. 使用 Robotics System Toolbox 建模示例:构建一个六自由度工业机器人的动力学模型。步骤:四、示例:两连杆机械臂的动力学建模目标:步骤:五、结果分析1. 动态响应2. 参数敏感性六、总结

xiaoheshang_123的博客 626

【算法】排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、基数排序、堆排序)

八大排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、基数排序、堆排序)

酷酷的馫博客 1万+

SCADA|KingSCADA通过组合框选择修改变量的值

《SCADA项目中组合框控件的使用方法》 本文详细介绍了SCADA系统中组合框(下拉框)控件的应用方法。通过具体示例演示如何实现:当选择"雷工笔记"时变量值为100,选择"雷工杂谈"时为200,选择"小李食代"时为300的功能。主要实现步骤包括:1)创建项目并添加组合框控件;2)设置Items选项及对应数值;3)创建内存变量;4)使用GetCurrentIndex()和GetItemData()方法;5)在选项变化事件中编写脚本。该控件在SCADA

做有价值的事,积累有价值的笔记! 865

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

2301_80288511的博客 3162

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法——十大排序(冒泡排序,选择排序,堆排序,插入排序,归并排序,快速排序,希尔排序,计数排序,基数排序,桶排序)

排序算法准备算法模板冒泡排序(Bubble Sort)定义执行流程代码实现选择排序(Selection Sort)定义执行流程代码实现插入排序(Insertion Sort)定义执行流程代码实现希尔排序(Shell Sort)定义执行流程代码实现堆排序(Heap Sort)定义执行流程代码实现归并排序(Merge Sort)定义执行流程代码实现快速排序(Quick Sort)定义执行流程代码实现计数排序(Counting Sort)定义执行流程代码实现基数排序(Radix Sort)定义执行流程代码实现桶排

mazouri的博客 5022

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

排序算法:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序、归并排序

排序算法相关总结,涉及的排序算法有:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序。

qq_53130059的博客 5646

【七大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序

所谓排序,就是把一堆杂乱的数据,排成升序或降序(递增/增减)。假设一组数据[1,2,9,5,5,6,8],进行升序排序后,两个5的相应位置不发生改变,即称为稳定的排序,否则就是不稳定排序。数据元素全部放在内存中进行排序。即将待排序的记录存储在外存中,排序时再把数据一部分一部分地调入内存进行排序,在排序过程中需要多次进行内存和外存之间地交换。

Original0的博客 3625

【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、布尔排序、桶排序和堆排序

qq_35831906的博客 2542

简单排序——选择排序、冒泡排序、插入排序

本文利用示例和图示的方法详细阐述了简单排序(选择排序、冒泡排序、插入排序)的算法原理和过程,并给出对应的代码供读者参考。

weixin_65472178的博客 7070

排序算法:冒泡排序、插入排序、选择排序、希尔排序

相关博客: 排序算法:冒泡排序、插入排序、选择排序、希尔排序 排序算法:归并排序、快速排序 排序算法:桶排序、计数排序、基数排序 排序算法:堆排序 十大排序算法小结 一、冒泡排序: 1、算法原理: 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n...

张维鹏的博客 6477

【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序

六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序

一点一点变好 3593

【数据结构】排序合集(直接插入排序、希尔排序、冒泡排序、堆排序、选择排序、快速排序、归并排序、计数排序)

完希望这篇小小文章可以为你解答疑惑!若上述文章有什么错误,欢迎各位大佬及时指出,我们共同进步!

2401_85054434的博客 1485

常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的排序方式来。它必须要把算所有的元素重复地进行跑一遍,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 冒泡排序算法的原理如下: 1,比较相邻的元素。如果第一个比第二个大,就交换他们两个,如果不是相等的就跳过比下面的元素 ,这样依次的循环下去 直到所有的元素都比较完成才结束。 2,针对所有的元素重复以上的

无心 2623
上一篇: 折半查找
下一篇: OJ猴子吃桃
Never__Forget
博客等级 码龄6年 1粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值