冒泡法排序matlab语言_matlab用起泡法排序

为了让大家掌握多种排序方法的基本思想,本篇文章带着大家对数据结构的常用七大算法进行分析:包括直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序等,并能够用高级语言实现。

冒泡法排序matlab语言_matlab用起泡法排序

希望通过对这些算法效率的比较,加深对算法的理解。

①插入排序

②折半插入排序

③选择排序

④起泡排序

⑤快速排序

⑥希尔排序

⑦堆排序

⑧归并排序

排序算法的分析图解:

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

冒泡法排序matlab语言_matlab用起泡法排序

用随机数(介于1-100)产生10个待排序数据元素的关键字值)。

① 采用直接插入排序和希尔排序方法对上述待排数据进行排序并输出序后的有序序列;

② 采用冒泡排序、快速排序方法对上述待排数据进行排序并输出序后的有序序列;

③ 采用简单选择排序、堆排序方法对上述待排数据进行排序并输出序后的有序序列;

④ 采用归并排序方法对上述待排数据进行排序并输出排序后的有序序列;

代码分析

头文件:

#include<cstdio> #include<iostream> #include<cstdlib> #define MAXSIZE 100 using namespace std; typedef int KeyType; typedef int InfoType; typedef struct{ KeyType key; InfoType otherinfo; }RedType; typedef struct{ RedType r[MAXSIZE+1]; int length; }SqList;

①插入排序

void InsertSort(SqList &L) { int i,j,a=0,b=0; for(i=1;i<=L.length;++i) { if(L.r.key<L.r[i-1].key) { L.r=L.r; L.r=L.r[i-1]; a++; } for(j=i-2;L.r.key<L.r.key;--j) L.r[j+1]=L.r;b++; L.r[j+1]=L.r; } cout<<"比较次数:"<<a<<"移动次数:"<<b<<endl; }

冒泡法排序matlab语言_matlab用起泡法排序

②折半插入排序

void BInsertSort(SqList &L) { int low,high,m; for(int i=2;i<=L.length;++i) { L.r=L.r; low=1;high=i-1; while(low<=high) { m=(low+high)/2; if(L.r.key<L.r.key)high=m-1; else low=m+1; } for(int j=i-1;j>=high+1;--j) L.r[j+1]=L.r; L.r[high+1]=L.r; } }

冒泡法排序matlab语言_matlab用起泡法排序

③选择排序

void SelectSort(SqList &L) { int j,k; for(int i=1;i<=L.length;++i) { k=i; for(j=i+1;j<=L.length;j++) if(L.r.key<L.r.key)k=j; if(k!=i) { L.r.key=L.r.key; L.r.key=L.r.key; L.r.key=L.r.key; } } }

冒泡法排序matlab语言_matlab用起泡法排序

④起泡排序

void BubbleSort(SqList &L) { int i,j; for(i=1;i<=L.length;++i) { for(j=1;j<L.length-i+1;++j) { if(L.r[j+1].key<L.r.key) { L.r.key=L.r.key; L.r.key=L.r[j+1].key; L.r[j+1].key=L.r.key; } } } }

冒泡法排序matlab语言_matlab用起泡法排序

⑤快速排序

int Partition(SqList &L,int low,int high) { L.r=L.r; KeyType pivotkey=L.r.key; while(low<high) { while(low<high&&L.r.key>=pivotkey)--high; L.r=L.r; while(low<high&&L.r.key<=pivotkey)++low; L.r=L.r; } L.r=L.r; return low; } void QSort(SqList &L,int low,int high) { if(low<high) { int pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); } }

冒泡法排序matlab语言_matlab用起泡法排序

⑥希尔排序

void ShellInsert(SqList &L,int dk) { int i,j; for(i=dk+1;i<=L.length;++i) { if(L.r.key<L.r[i-dk].key){L.r=L.r; for(j=i-dk;j>0&&L.r.key<L.r.key;j-=dk) L.r[j+dk]=L.r; L.r[j+dk]=L.r; } } } void ShellSort(SqList &L,int dlta,int t) { for(int k=0;k<t;++k) ShellInsert(L,dlta); }

冒泡法排序matlab语言_matlab用起泡法排序

⑦堆排序

typedef SqList HeapType; void HeapAdjust(HeapType &H,int s,int m) { RedType rc=H.r;int j; for(j=2*s;j<=m;j*=2) { if(j<m&&H.r.key<H.r[j+1].key)++j; if(!(rc.key<H.r.key))break; H.r=H.r;s=j; } H.r=rc; } void HeapSort(HeapType &H) { int i; RedType temp; for(i=H.length/2;i>0;--i) HeapAdjust(H,i,H.length); for(i=H.length;i>1;--i) { temp=H.r; H.r=H.r; H.r=temp; HeapAdjust(H,1,i-1); }

冒泡法排序matlab语言_matlab用起泡法排序

⑧归并排序

void Merge(RedType SR,RedType &TR,int i,int m,int n) { int j,k; for(j=m+1,k=i;i<=m&&j<=n;++k) { if(SR.key<=SR.key) TR=SR[i++]; else TR=SR[j++]; } int t; if(i<=m) { for(t=i;t<=m;t++) TR[k+t-i]=SR; } if(j<=n) { for(t=j;t<=m;t++) TR[k+t-j]=SR; } } void MSort(RedType SR,RedType *TR1,int s,int t) { int m; RedType TR2[MAXSIZE+1]; if(s==t)TR1=SR; else{ m=(s+t)/2; MSort(SR,TR2,s,m); MSort(SR,TR2,m+1,t); Merge(TR2,TR1,s,m,t); } } void MergeSort(SqList &L) { MSort(L.r,L.r,1,L.length); }

冒泡法排序matlab语言_matlab用起泡法排序

随机生成函数

void RandSqList(SqList &L) { int n,max,min; printf("输入顺序表的大小\n"); cin>>n; printf("输入最小值和最大值\n"); cin>>min>>max; L.length=n; printf("随机产生%d个数\n",n); for(int i=1;i<=L.length;++i) { L.r.key=rand()%(max-min+1); L.r.key+=min; } printf("顺序表创建成功!\n"); }

输出函数

void Output(SqList L) { printf("输出:\n"); for(int i=1;i<=L.length;i++) cout<<"data"<<"["<<i<<"]"<<": "<<L.r.key<<endl; }

结论

(1)若n较小(例如n<50),可采用直接插入排序、冒泡排序或简单选择排序。如果记录中的数据较多,移动较费时的,应采取简单选择排序法。

(2)若记录的初始状态已经按关键码基本有序,则选用直接插入排序或冒泡排序法为宜。

(3)若n较大,则应采用改进排序方法,如快速排序、堆排序或归并排序法。这些排序算法的时间复杂度均为O(nlog2n),但就平均性能而言,快速排序被认为是目前基于比较记录关键码的内部排序中最好的排序方法,但遗憾的是,快速排序在最坏情况下的时间复杂度是O(n2),堆排序与归并排序的最坏情况时间复杂度仍为O(nlog2n)。堆排序和快速排序法都是不稳定的排序。若要求稳定排序,则可选用归并排序。

(4)基数排序可在O (d×n) 时间内完成对n个记录的排序,d是指单逻辑关键码的个数,一般远少于n。但基数排序只适用于字符串和整数这类有明显结构特征的关键码。

(5)前面讨论的排序算法,除基数排序外,都是在顺序存储上实现的。当记录本身的信息量很大时,为避免大量时间用在移动数据上,可以用链表作为存储结构。插入排序和归并排序都易在链表上实现,但有的排序方法,如快速排序和堆排序在链表上却很难实现。

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

冒泡法排序matlab语言_matlab用起泡法排序

编程学习视频分享:

冒泡法排序matlab语言_matlab用起泡法排序

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

本文【冒泡法排序matlab语言_matlab用起泡法排序】由作者: C/S结构 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4254.html

(0)
上一篇 2023-03-11 09:03:35
下一篇 2023-03-12 08:08:21

相关推荐

  • 二叉树遍历前序中序后序_二叉树先序遍历算法

    树的设计初衷与操作时间复杂度 树这种数据结构的出现主要是对链表数据结构的优化,链表数据结构是线性结构,操作一般需要O(N)的时间复杂度,树是链表的变形,即链表的每个节点包含一个节点,而树的节点可以包含多个节点,如二叉树为根节点,左节点,右节点三个节点组成一个大节点,所以相对链表来说,相同的节点个数由于这种大节点的存在,故长度变小了,每次可以获取更多个子节点的…

    2023-03-11
    200
  • html颜色代码怎么输入(改变字体颜色的代码)

    1.html字体颜色怎么设置 1)关于字体的设置主要有以下几种: font-family 设置字体,比如宋体、楷体等,都是利用font-family进行设置。 font-size 字体大小的设置。单位是px font-weight 字体粗细的设置。有个简单的小技巧及时输入700是加粗,输入400是正常显示,同时需要注意的是,数值后面是没有单位的,这也是跟字体…

    2023-03-18
    100
  • 淘宝 U家 质量比较好的

    今天的天津寒冷依旧,很久没感觉到冻耳朵,今天出去一会耳朵开始刺痛,冷的想飙脏话 这个季节,继续温度的话题更合时宜。 前两天写了篇文章,关于羽绒服的,其实仅仅是分享我自己喜欢的以及穿着体验,没想到很多朋友不吝时间的阅读并且回复,万分感谢,万分感谢,万分感谢(重要的事情来三遍) 下午去家附近的大悦城修电话,顺道去负一层的uniqlo转转,因为在之前那篇文字里和有…

    2023-03-16
    100
  • 新手入门excel表格制作_如何制作简单表格入门

    对于很多初入职场的小伙伴来说,学会制作Excel表格是一个必备技能,在工作中很多时候都需要用到,今天就手把手教你制作一个简单的Excel表格,初入职场必备技能! 今天教大家制作的表格是就是如下图,一个技术部的工资表,看着是不是很简单,今天这个教程是针对初入职场的小白,如果你是大神请绕过。 1、首先我们新建一个Excel表格,输入以下数据,效果如下图 2、选择…

    2023-03-17
    000
  • android框架结构(Android的体系结构)

    Android系统架构_小段学长的博客-CSDN博客_android系统架构 Android系统的层次架构非常清晰,其平台由应用程序、应用程序框架、系统库、Android运行时以及Linux内核5部分组成。 APPLICATIONS(应用程序) Android平台默认包含了主要的应用程序,包括电子邮件、短信、日历、地图、浏览器、联系人等,这些程序都是用Jav…

    2023-03-16
    100
  • 适配器未连接怎么解决

    相信网友们都会遇到电脑大大小小的问题故障,一般是先要检查电脑的系统问题和电脑的硬件问题,下面小编针对此问题整理相关的解答。 方法如下: 一、可能电脑的无线适配器的问题。建议去其它的设备插入看看,还是不行,只能更换一个适配器。 二、网卡驱动可能需要更新。 1,电脑可以下载个驱动精灵检测一下,会有提示要更新升级的。 2,系统自带的更新功能。 (1)右击我的电脑,…

    2023-03-12
    300
  • 截取字符串前几位的方法

    Excel表格截取字符串常用到的方法是函数法,常用的字符串截取函数包括left,right,mid函数等,今天小编给大家讲解一下上述三个常用函数的语法,然后以一个字符串为例分别应用以上三个函数截取。 字符串截取常用的函数有:left函数,right函数和mid函数 ; left函数语法:left(text,num_chars),从左侧开始截取部分字符串 ; …

    2023-03-09
    700
  • 软文写作技巧教程有什么呢_软文写作技巧有哪些

    软文是一种具有伪装性的广告,它与平常性的文章不一样,目的是为了提升商家的知名度、美誉度。很多人不知道该如何写一篇既吸引人,又能达到企业宣传目的软文,这里金蛛教育的韩老师就教教你,软文的写作技巧。 1、有吸引力的标题 标题是读者第一眼看到文字,因此一个好的标题几乎决定了一篇软文成功的大半,如何写一个有创意,吸引人的标题呢?你可以从以下几个方面入手:第一,结合当…

    2023-03-09
    900
  • python编程从入门到精通电子书_python编程书籍电子版

    点击上方关注,All in AI中国 Python是一种通用的解释型编程语言,它用于Web开发、机器学习和复杂的数据分析。Python对于初学者来说是一种完美的语言,因为它易于学习和理解。随着这种语言的普及,应用Python编程的机会也在不断扩大。如果你想学习Python编程,市场上有很多书籍供你学习。我们为你提供了一张最适合初学者和高级程序员的Python…

    2023-03-11
    400
  • 微服务开发16g内存够用吗

    随着微服务的普及,许多企业踏上微服务之旅。 微服务化后,应用数量可能高一个数量级。 一般企业,以前三五个应用能支撑业务,微服务化之后应用数量可能多达几十个。 每个微服务往往独立部署,内存的消耗自然也高居不下,以前两台8核16G机器指不定就能跑起来,现两台16核64G还不一定够用,同时由于多套环境的存在加上容器编排工具(如K8s)所需的资源,硬件资源的投入自然…

    2023-03-14
    000

发表回复

登录后才能评论
返回顶部
错说博客上线啦!