【排序】快速排序,C++实现
原创博文,转载请注明出处!
本文代码的github地址
# 基本思想
”快速排序“是对”冒泡排序“的改进。
基本原理:基于分治法,在待排线性表中取一个元素pivot作为枢轴值,通过一趟排序将待排线性表划分为独立的两部分,第一部分的所有元素小于pivot,第二部分的所有元素大于等于pivot,pivot位于其最终位置。递归对两个子表做快速排序。
# C++代码(递归和非递归)
#include <iostream>
#include <vector>
using namespace std;// 一次快速排序
int partition(vector<int> &a, int low, int high)
{// 枢轴值(线性表第一个元素作为枢轴值)int key = a[low];while(low < high){// 从右侧找小于pivot的值,替换low位置的元素while(low < high && a[high] >= key)--high;a[low] = a[high];// 从左侧找大于pivot的值,替换high位置的元素while(low < high && a[low] <= key)++low;a[high] = a[low];}a[low] = key;return low;// 返回一趟排序后确定的元素位置
}//快速排序的递归形式
void QuickSort(vector<int> &a, int low, int high)
{if(low < high)// 递归出口{int loc = partition(a, low, high);//一趟排序结果的调用QuickSort(a, low, loc-1);QuickSort(a, loc+1, high);}
}int main()
{vector<int> a={46,79,56,38,40,84};QuickSort(a, 0, a.size()-1);// 打印排序后的数组for(int i=0;i<a.size();++i)cout<<a[i]<<' ';return 0;
}
#include <iostream>
#include <vector>
#include <stack>
using namespace std;int partion(vector<int> &root,int low,int high)
{int part=root[low];while(low<high){while(low<high&&root[high]>part)high--;root[low]=root[high];while(low<high&&root[low]<part)low++;root[high]=root[low];}root[low]=part;return low;
}void quickSort(vector<int> &root,int low,int high)
{stack<int> st;int k;if(low<high){st.push(low);st.push(high);while(!st.empty()){int j=st.top();st.pop();int i=st.top();st.pop();k=partion(root,i,j);if(i<k-1){st.push(i);st.push(k-1);}if(k+1<j){st.push(k+1);st.push(j);}}}
}int main()
{vector<int> root = {4,2,6,7,9,5,1,3};quickSort(root,0,root.size());for(int i=0;i<8;i++)cout<<root[i]<<endl;return 0;
}
转载于:https://www.cnblogs.com/wanglei5205/p/8732464.html
【排序】快速排序,C++实现相关推荐
- 排序-交换类排序--快速排序简介
交换类排序有冒泡和快排 冒泡排序相对简单,之前总结过: https://blog.csdn.net/u011109881/article/details/80038573 快速排序 参考: 数据结构( ...
- DS排序--快速排序
题目 问题 C: DS排序--快速排序 时间限制: 1 Sec 内存限制: 128 MB 提交: 480 解决: 303 [提交][状态][讨论版] 题目描述 给出一个数据序列,使用快速排序算法进行从 ...
- 【啊哈!算法】算法3:最常用的排序——快速排序
[啊哈!算法]算法3:最常用的排序--快速排序 上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...
- 最常用的排序---快速排序法
最常用的排序-快速排序法 桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢? 假设现在需要对"6,1,2,7 ...
- java 快排_八大排序-快速排序(搞定面试之手写快排)
概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...
- 冒泡排序 选择排序 快速排序(C语言)
#include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数#define arrayS ...
- 排序---快速排序及其切分函数Partition应用
快速排序 快速排序通过一个切分元素将数组分成两个子数组,左子数组小于等于切分元素,右子数组大于切分元素,将这两个子数组排序,也就是将整个数组排序了. 代码如下: public class Sort ...
- 看动画学算法之:排序-快速排序
文章目录 简介 快速排序的例子 快速排序的java代码实现 随机快速排序的java实现 快速排序的时间复杂度 简介 快速排序也采用的是分而制之的思想.那么快速排序和归并排序的区别在什么地方呢? 归并排 ...
- 算法-排序-快速排序(包含多种快速排序)
快速排序 特点:原址排序,最坏的时间复杂度O(n^2) 平均时间复杂度O(nlgn) 比归并排序系数常数项小 不稳定 底部有最坏时间复杂度为Ω(nlgn)的快速排序地址 void quick_sort ...
- 理论基础 —— 排序 —— 快速排序
[概述] 快速排序是一种不稳定的排序方法,其同样属于交换排序,是对冒泡排序的一种改进:在冒泡排序中,记录的比较与移动是在相邻位置进行的,记录每次交换只能后移一个位置,因而总的比较次数与移动次数较多:而 ...
最新文章
- openpyxl读取excel_初识openpyxl--读取excel数据(二)
- Linux排序命令sort详解
- 【struts2】action中使用通配符
- mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
- 【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测
- 【Mysql高级语法:视图操作】
- Azure Kinect SDK Ubuntu18.04安装使用
- foregroundservice的用处和用法
- 几个LabVIEW软件欢迎页面
- 腾讯IP+文旅的探索实践
- RoaringBitmap
- Android热修复学习之旅开篇——热修复概述
- 2017lol服务器维修时间,LOL维护公告2017最新内容 英雄联盟今天更新到几点
- 关于Mifare Classic Tool (MTC)工具的秘钥包
- android16进制编辑器,16进制编辑器app
- CTF之代码审计汇总
- 市北·GMIS 2019 全球数据智能峰会全记录
- 年金、净现值NPV、IRR、现值PV、终值FV、EAR等常见概念
- 研究亥姆霍兹线圈轴线磁场分布(2)
- java合法标识符_JAVA合法标识符
热门文章
- HDU 1004 Let the Balloon Rise
- WebSpider的编码问题(乱码)浅析
- 如何用Python从本地将一个文件备份到Google Drive
- 云创大会来了!全行业关心的热点都在这里
- AndroidStudio使用第三方jar包报错(Error: duplicate files during packaging of APK)
- CSP浏览器安全策略备忘
- BZOJ3799 : 字符串重组
- 轻量级的jQuery表单验证插件 - HAPPY.js
- Windows服务初探
- ora-12545连接错误解决一例