数据结构-交换排序(冒泡、快速)

冒泡排序

基本思想

先将第一个记录与第二个记录比较,将较大的记录放到第二个位置上,之后再将第二个记录与第三

个记录比较,将较大的记录放到第三个位置上,如此类推,知道比较完最后一个位置,此时注意到

最后一个位置是整个记录表中最大的记录了。随后我们进行第二趟比较,但是此时只需要比较到倒

数第二个位置即可,此时次大的记录被放在了倒数第二个位置,直到比较完成。

注意到,较大的记录被放在了后面,娇小的记录被放在了前面,这跟水中冒泡一样,较重的物体下

沉,而水泡上浮。

故被称作:“冒泡法”。

示例

代码

OrderList BubbleSort(OrderList L)
{RecordType tmp;int i,j;for(i=1;i<=L.length-1;i++){for(j=1;j<=L.length-i;j++){if(L.data[j].key > L.data[j+1].key){tmp = L.data[j];L.data[j] = L.data[j+1];L.data[j+1] = tmp;}}}return L;
}

快速排序

基本思想

从待排序的N个记录中,取第一个记录作为枢纽记录,所有比枢纽记录小的记录放在左侧,比枢纽

记录大的记录放在右侧。然后对两边的两个字表重新进行快速排序(选择枢纽记录)。

直到每个子表的长度不大于1为止。

示例

代码

int Partition(OrderList *L,int i,int j)		//对当前i->j范围内的记录做一次快速排序 
{KeyType pivotkey;L->data[0] = L->data[i];pivotkey = L->data[i].key;while(i<j){while(i<j&&L->data[j].key>=pivotkey)j--;L->data[i] = L->data[j];while(i<j&&L->data[i].key<=pivotkey)i++;L->data[j] = L->data[i];}L->data[i] = L->data[0];return i;
}void QuickSort(OrderList *L,int i,int j)	//递归快速排序 
{int pivotkey;if(i<j){pivotkey = Partition(L,i,j);QuickSort(L,i,pivotkey-1);QuickSort(L,pivotkey+1,j);}
}

总代码

#include<stdio.h>
#define MAX 100
typedef int KeyType;
typedef struct{KeyType key;
}RecordType;
typedef struct{RecordType data[MAX];int length;
}OrderList;OrderList BubbleSort(OrderList L)
{RecordType tmp;int i,j;for(i=1;i<=L.length-1;i++){for(j=1;j<=L.length-i;j++){if(L.data[j].key > L.data[j+1].key){tmp = L.data[j];L.data[j] = L.data[j+1];L.data[j+1] = tmp;}}}return L;
}int Partition(OrderList *L,int i,int j)		//对当前i->j范围内的记录做一次快速排序 
{KeyType pivotkey;L->data[0] = L->data[i];pivotkey = L->data[i].key;while(i<j){while(i<j&&L->data[j].key>=pivotkey)j--;L->data[i] = L->data[j];while(i<j&&L->data[i].key<=pivotkey)i++;L->data[j] = L->data[i];}L->data[i] = L->data[0];return i;
}void QuickSort(OrderList *L,int i,int j)	//递归快速排序 
{int pivotkey;if(i<j){pivotkey = Partition(L,i,j);QuickSort(L,i,pivotkey-1);QuickSort(L,pivotkey+1,j);}
}int main()
{int simple[11] = {-1,5,9,1,100,56,78,22,40,60,99};int i;OrderList L;L.length = 10;for(i=1;i<11;i++)L.data[i].key = simple[i];//L = BubbleSort(L);	冒泡排序 //QuickSort(&L,1,10);	快速排序 for(i=1;i<11;i++)printf("%d ",L.data[i].key);return 0;
} 

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

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

相关文章

红队攻防之hash登录RDP

没什么好害怕&#xff0c;孩子放心去飞吧&#xff0c;在你的身后有个等你的家 Restricted Admin Mode 受限管理模式是一项 Windows 功能&#xff0c;可防止将 RDP 用户的凭据存储在建立 RDP 连接的计算机的内存中。 这是用来防止用户&#xff08;管理员&#xff09;在 RDP 进…

shopee数据:如何获取Shopee平台的数据

在如今快速发展的跨境电商市场中&#xff0c;Shopee&#xff08;虾皮&#xff09;作为一个备受关注的平台&#xff0c;主要服务于东南亚市场。对于卖家来说&#xff0c;了解Shopee平台的数据是非常重要的&#xff0c;因为这可以帮助他们更好地了解市场趋势、优化商品策略并提高…

Ubuntu 20.0 + mysql 8.0 用户和密码修改

第一步 下载&#xff08;简单,注意联网&#xff09;Ubuntu 终端输入以下两行命令 (1) 数据库的服务端及客户端数据库的开发软件包 sudo apt-get install mysql-server mysql-client (2) 数据库的开发软件包 sudo apt-get install libmysqlclient-dev 第二步 查看是否安装成功 …

nginx与vue路由

nginx代理方式 server {listen 80;server_name localhost;location /order/{ proxy_pass http://localhost:8080/order } 表示监听80端口&#xff0c;将请求反向代理到后端服务器。 例如&#xff1a;当浏览器请求的路径是 localhost:80/order/get&#xff0c;检测到请求路径…

微信小程序获取手机号流程以及用到的API

微信小程序获取手机号流程以及用到的API和代码示例如下&#xff1a; 获取手机号流程&#xff1a; 用户点击授权登录按钮&#xff0c;小程序会提示用户授权并获取用户同意。获取到用户的同意后&#xff0c;小程序会将用户的临时登录凭证code返回给开发者服务器。开发者服务器通…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷11

单选题 1、在阅读文章和接受信息时注意区分事实和观点十分重要。事实&#xff08;或称为命题&#xff09;不同于观点的一个主要特征是 A、可以被证实或证伪 B、是准确无误的 C、是正式的表达 D、表达了个人看法 答案&#xff1a;A 2、现代意义的知识产权是在多数国家都受…

血的教训--redis被入侵之漏洞利用复现--总览

血的教训–redis被入侵之漏洞利用复现–总览 相信大家对于自己的服务器被入侵&#xff0c;还是比较憎恨的&#xff0c;我的就被攻击了一次&#xff0c;总结经验&#xff0c;自己也是整理了这一个系列&#xff0c;从最基础到最后面的自己总结被攻破的步骤&#xff0c;非常清晰的…

c++调用openssl对文件加解密

c调用openssl对文件加解密 1.OpenSSL简介2.使用 EVP 库实现 DES 和 AES 加密EVP_EncryptUpdate 函数参数详解EVP 库的AES 算法的cbc模式 3.DEC加密的ecb模式 (没有EVP方式效率高) 1.OpenSSL简介 OpenSSL库是由C语言实现&#xff0c;整个软件包大概可以分成三个主要的功能部分&…

20世纪30年代的大危机

背景 1929年9月&#xff0c;美国财政部部长安德鲁梅隆向公众保证“现在没有担心的理由&#xff0c;这一繁荣的高潮将会继续下去”。 当时流行的一首儿歌&#xff1a;“梅隆拉响汽笛&#xff0c;胡佛敲起钟&#xff0c;华尔街发出信号&#xff0c;美国往地狱里冲&#xff01;”…

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者&#xff1a;Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户&#xff0c;请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…

聚观早报 |红魔9 Pro开卖;真我GT5 Pro定档

【聚观365】11月29日消息 红魔9 Pro开卖 真我GT5 Pro定档 一加12镜头细节公布 Redmi K70 Pro将搭载夜枭算法 苹果Vision Pro头显下月量产 红魔9 Pro开卖 红魔电竞旗舰最新力作——红魔9 Pro系列正式发布。作为一款全能电竞旗舰&#xff0c;该机搭载了第三代骁龙8移动平台…

计网Lesson4 - 计算机组网模型

文章目录 计算机的连接方式1. 两台计算机的互联2. 多台计算机的互联&#xff08;旧式&#xff09;3. 多台计算机的互联 --- 集线器&#xff08;Hub&#xff09;4. 网桥5. 多台计算机的互联 --- 交换器&#xff08;Switch&#xff09; 计算机的连接方式 1. 两台计算机的互联 网…

唯创知音WT2003H系列MP3录音语音芯片:高精度ADC与DAC,强大IO驱动能力成就音频卓越

在音频领域里&#xff0c;高精度和强大的驱动能力一直是工程师们追求的目标。唯创知音的WT2003H系列MP3录音芯片恰好满足了这一需求&#xff0c;该芯片具备16 bit高精度的ADC及DAC功能&#xff0c;大功率的IO驱动能力&#xff0c;能够直接驱动64mA&#xff0c;为电子产品带来卓…

【互联网小趣味】身为程序员哪一个瞬间让你最奔溃?

目录 编译错误&#xff1a; 逻辑错误&#xff1a; 调试问题&#xff1a; 复杂的需求&#xff1a; 时间压力&#xff1a; 与他人合作问题&#xff1a; 编译错误&#xff1a; 你在编写代码时&#xff0c;突然遇到了一堆红色的错误提示&#xff0c;但是你无法立即找到问题所…

web框架,django,路由控制,视图层(补充)

web框架 是什么&#xff1f; web 框架是什么---》别人帮咱们写了一些基础代码---》我们只需要在固定的位置写固定的代码--》就能实现一个web应用 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多…

JSTL标签 参考手册

前言 JSTL标签库&#xff0c;是日常开发经常使用的&#xff0c;也是众多标签中性能最好的。把常用的内容&#xff0c;放在这里备份一份&#xff0c;随用随查。尽量做到不用查&#xff0c;就可以随手就可以写出来。这算是Java程序员的基本功吧&#xff0c;一定要扎实。 JSTL全名…

C#多线程创建及线程的同步

需求&#xff1a;有时为了能分时的调用多个任务运行&#xff0c;因此需要考虑多线程的编程方式 操作步骤如下&#xff1a; 1&#xff09;创建线程并开启线程 Thread thread0 new Thread(() > DoWork0(0)); thread0.Start(); 2&#xff09;编写线程函数 static void Do…

“目标函数“(Objective Function)和“损失函数“(Loss Function)有什么区别

"目标函数"&#xff08;Objective Function&#xff09;和"损失函数"&#xff08;Loss Function&#xff09;通常在机器学习和优化问题中使用&#xff0c;它们在某些上下文中可以是相同的&#xff0c;但也有一些区别。 目标函数&#xff08;Objective Func…

漏洞扫描-德迅云安全漏洞扫描服务

漏洞扫描是指基于漏洞数据库&#xff0c;通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测&#xff0c;发现可利用漏洞的一种安全检测的行为。 漏洞扫描的主要目的是发现系统、网络或应用程序中可能存在的安全漏洞和缺陷&#xff0c;以便及时修复这些漏洞和缺…

python实验3 石头剪刀布游戏

实验3&#xff1a;石头剪刀布游戏 一、实验目的二、知识要点图三、实验1. 石头剪刀布2. 实现大侠个人信息 一、实验目的 了解3类基本组合数据类型。理解列表概念并掌握Python中列表的使用。理解字典概念并掌握Python中字典的使用。运用jieba库进行中文分词并进行文本词频统计。…