排序序列排序算法总结(二)——快速排序、归并排序
最近研究排序序列,稍微总结一下,以后继续补充:
快速排序
排序想思:通过一趟排序将要排序的数据分割成独立的两分部,其中一分部的有所数据都比另外一分部的有所数据都要小,然后再按此法方对这两分部数据别分停止快速排序,全体排序进程可以递归停止,以此到达全体数据成变有序序列。其中,个人认为如何将数据按key排放这一步调最为主要,理解了这里,全体法算该应就明确了。
排序实例:49 38 65 97 76 13 27
否是定稳:否。
时间复杂度:均平时间复杂度Ο(n log n) ,最坏为O(n^2)。
void swap(int *pLeft,int *pRight)
{int temp;temp = *pLeft;*pLeft= *pRight;*pRight = temp;
}void my_quick_sort(int a[], int begin, int end)
{int compare=a[begin], left =begin,right = end;if(left > right)return;while(left < right){while ((left < right) && (a[right] >= compare))right--;swap(&a[left], &a[right]);while ((left < right) && (a[left] <= compare))left++;swap(&a[left], &a[right]);}my_quick_sort(a, begin, left-1);my_quick_sort(a, left+1, end);
}
书籍好比一架梯子,它能引领人们登上文化的殿堂;书籍如同一把钥匙,它将帮助我们开启心灵的智慧之窗;书籍犹如一条小船,它会载着我们驶向知识的海洋。
并归排序
排序想思:并归(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为多少个子序列,每个子序列是有序的。然后再把有序子序列合并为团体有序序列。
否是定稳:定稳。
时间复杂度:O(n*logn)。
void mergearray(int a[], int first, int mid, int last, int temp[])
{int i = first, j = mid + 1;int m = mid, n = last;int k = 0;while (i <= m && j <= n){if (a[i] <= a[j])temp[k++] = a[i++];elsetemp[k++] = a[j++];}while (i <= m)temp[k++] = a[i++];while (j <= n)temp[k++] = a[j++];for (i = 0; i < k; i++)a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{if (first < last){int mid = (first + last) / 2;mergesort(a, first, mid, temp); //左边有序mergesort(a, mid + 1, last, temp); //右侧有序mergearray(a, first, mid, last, temp); //再将二个有序数列合并}
}
bool MergeSort(int a[], int n)
{int *p = new int[n];if (p == NULL)return false;mergesort(a, 0, n - 1, p);delete[] p;return true;
}
注:文中分部代码考参了其他博文。
文章结束给大家分享下程序员的一些笑话语录: 问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?
答:因为李艳红这种败类,所以我没女友!
排序序列排序算法总结(二)——快速排序、归并排序相关推荐
- 七大排序的个人总结(二) 归并排序(Merge
七大排序的个人总结(二) 归并排序(Merge 归并排序(Merge Sort): 归并排序是一个相当"稳定"的算法对于其它排序算法,比如希尔排序,快速排序和堆排序而言,这些算法 ...
- python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...
前言 原理就不在这里说了,好多大神肯定比我这个初学者讲的好很多,推荐去B站看视频讲解,跟着手敲代码 为什么选这三个排序呢? 首先快排是必须掌握的 看看快排在最坏的情况下(O(n²)),且不使用辅助空间 ...
- C语言实现希尔排序shell sort算法之二(附完整源码)
希尔排序shell sort算法 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) 希尔排序shell sort算法的完整源码(定义,实现,main函数测试) #includ ...
- 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序
拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...
- C++shell sort希尔排序的实现算法之二(附完整源码)
C++shell sort希尔的实现算法 C++shell sort希尔的实现算法完整源码(定义,实现,main函数测试) C++shell sort希尔的实现算法完整源码(定义,实现,main函数测 ...
- 算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描
首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法. ...
- 9个元素换6次达到排序序列_原创系列 |冒泡排序提升为快速排序,都发生了什么?...
「Python与算法社区」 第 310 篇原创 " 1 你会学到什么? " 彻底弄明白常用的排序算法的基本思想,算法的时间和空间复杂度,以及如何选择这些排序算法,确定要解决的问题的 ...
- java通过比较大小排序_排序算法的比较与java实现
冒泡排序 基本思想: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上 ...
- Python排序算法(二) 快速排序、希尔排序、归并排序
这篇文章有的排序算法是:快速排序.希尔排序.归并排序. 快速排序 ''' 快速排序 '''def quick_sort(aList, first, last):if first >= last: ...
最新文章
- 数据结构与算法(8-1)顺序表查找及优化
- C - 食物链 POJ - 1182
- 首批新冠肺炎人体疫苗来了!全球第一mRNA药物研发公司研制,已开启安全性临床试验...
- 学习Unix/Linux编程要学些什么
- LINK : fatal error LNK1168: cannot open Debug/Test.exe for writing
- 使用C#读写结构化的二进制文件
- FFmpeg - C++中使用ffmpeg库
- java反序列化后不相等_Jackson:使用不同的属性名称序列化/反序列化 - java
- Kanas.net Framework 入门介绍
- .net Api 接口调用 增删改查
- 程序员的那点事(转自java老师李明志)
- 决策树案例:基于python的商品购买能力预测系统
- caffe for Windows下的编译错误
- Mysql 创建数据库\添加用户\用户授权
- 数字滤波器的MATLAB与FPGA实现--Altera/Verilog版的pdf版,杜勇等编著的书。
- 做京东运营2年的感悟
- 南京大学2020计算机考研分数线,南京大学2020考研复试分数线已公布
- 简单画图程序(windows程序设计)
- 数字图像处理(冈萨雷斯版)-第二章
- java基础-变量定义
热门文章
- 过滤CString字符串中各位是数字,大小写字母,符号,汉字
- AndroidStudio_在android中使用properties配置文件_进行配置_只能读取配置_不能写入配置_放在assets---Android原生开发工作笔记230
- 持续集成部署Jenkins工作笔记0002---认识Jenkins和Hudson
- Web前端工作笔记010---IE8兼容_IE8不能使用foreach_indexOf的解决方案
- Kafka内核理解:消息的收集/消费机制
- Setting the Background Image for a List Control
- Java代码怎么取消订阅功能,RxJava2 中多种取消订阅 dispose 的方法梳理( 源码分析 )...
- html点击文字展开图片,DIV CSS鼠标经过悬停在图片上时图片上方显示文字
- java hdfs导入hbase_使用BulkLoad批量导入数据到HBase中
- hp380g5 安装linux7,hp 380G5 安装centos 7