原创博文,转载请注明出处!

本文代码的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++实现相关推荐

  1. 排序-交换类排序--快速排序简介

    交换类排序有冒泡和快排 冒泡排序相对简单,之前总结过: https://blog.csdn.net/u011109881/article/details/80038573 快速排序 参考: 数据结构( ...

  2. DS排序--快速排序

    题目 问题 C: DS排序--快速排序 时间限制: 1 Sec 内存限制: 128 MB 提交: 480 解决: 303 [提交][状态][讨论版] 题目描述 给出一个数据序列,使用快速排序算法进行从 ...

  3. 【啊哈!算法】算法3:最常用的排序——快速排序

    [啊哈!算法]算法3:最常用的排序--快速排序        上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...

  4. 最常用的排序---快速排序法

    最常用的排序-快速排序法 桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢? 假设现在需要对"6,1,2,7 ...

  5. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  6. 冒泡排序 选择排序 快速排序(C语言)

    #include <stdio.h> #include <stdlib.h> #include <time.h> //用到了time函数#define arrayS ...

  7. 排序---快速排序及其切分函数Partition应用

    快速排序   快速排序通过一个切分元素将数组分成两个子数组,左子数组小于等于切分元素,右子数组大于切分元素,将这两个子数组排序,也就是将整个数组排序了. 代码如下: public class Sort ...

  8. 看动画学算法之:排序-快速排序

    文章目录 简介 快速排序的例子 快速排序的java代码实现 随机快速排序的java实现 快速排序的时间复杂度 简介 快速排序也采用的是分而制之的思想.那么快速排序和归并排序的区别在什么地方呢? 归并排 ...

  9. 算法-排序-快速排序(包含多种快速排序)

    快速排序 特点:原址排序,最坏的时间复杂度O(n^2) 平均时间复杂度O(nlgn) 比归并排序系数常数项小 不稳定 底部有最坏时间复杂度为Ω(nlgn)的快速排序地址 void quick_sort ...

  10. 理论基础 —— 排序 —— 快速排序

    [概述] 快速排序是一种不稳定的排序方法,其同样属于交换排序,是对冒泡排序的一种改进:在冒泡排序中,记录的比较与移动是在相邻位置进行的,记录每次交换只能后移一个位置,因而总的比较次数与移动次数较多:而 ...

最新文章

  1. openpyxl读取excel_初识openpyxl--读取excel数据(二)
  2. Linux排序命令sort详解
  3. 【struts2】action中使用通配符
  4. mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
  5. 【Jmeter篇】临界区控制器Critical Section Controller业务流顺序负载压测
  6. 【Mysql高级语法:视图操作】
  7. Azure Kinect SDK Ubuntu18.04安装使用
  8. foregroundservice的用处和用法
  9. 几个LabVIEW软件欢迎页面
  10. 腾讯IP+文旅的探索实践
  11. RoaringBitmap
  12. Android热修复学习之旅开篇——热修复概述
  13. 2017lol服务器维修时间,LOL维护公告2017最新内容 英雄联盟今天更新到几点
  14. 关于Mifare Classic Tool (MTC)工具的秘钥包
  15. android16进制编辑器,16进制编辑器app
  16. CTF之代码审计汇总
  17. 市北·GMIS 2019 全球数据智能峰会全记录
  18. 年金、净现值NPV、IRR、现值PV、终值FV、EAR等常见概念
  19. 研究亥姆霍兹线圈轴线磁场分布(2)
  20. java合法标识符_JAVA合法标识符

热门文章

  1. HDU 1004 Let the Balloon Rise
  2. WebSpider的编码问题(乱码)浅析
  3. 如何用Python从本地将一个文件备份到Google Drive
  4. 云创大会来了!全行业关心的热点都在这里
  5. AndroidStudio使用第三方jar包报错(Error: duplicate files during packaging of APK)
  6. CSP浏览器安全策略备忘
  7. BZOJ3799 : 字符串重组
  8. 轻量级的jQuery表单验证插件 - HAPPY.js
  9. Windows服务初探
  10. ora-12545连接错误解决一例