快速排序算法:

思路:
在QSort函数中,设置一个枢轴pivot,Partition函数中选择第一个数当作枢轴变量,经过循环交换,使得它左边的值都比它小,右边的值比它大;然后再递归调用QSort函数。
注:在最优的情况下,时间复杂度变O(nlogn);在最坏的情况下,时间复杂度为O(n^2)。空间复杂度为O(logn)。由于关键字的比较和交换是跳跃式进行的,因此,快速排序是一种不稳定的排序方法。

代码实现:

//快速排序(排序后为从小到大)
#include <iostream>
#include <algorithm>
using namespace std; int Partition(int *p, int low, int high){int pivotkey;pivotkey = *(p + low);//设置传进来的数组中第一个数为枢轴变量while (low < high){while (low < high&&*(p + high) >= pivotkey){//如果low<high,且*(p+high)>=枢轴变量,则--high--high;}swap(*(p + low), *(p + high));//交换值while (low < high&&*(p + low) <= pivotkey){++low;}swap(*(p + low), *(p + high)); }return low;//返回枢轴
}void QSort(int *p,int low,int high){int pivot;//设置枢轴,即在这个位置,它左边的值比它小,右边的值比它大if (low < high){pivot = Partition(p+low, 0, high-low);//用来初步排序QSort(p+low, 0, pivot -1-low);//递归调用自己,这里传的p+low,是新截断数组第一个位置的指针,所以后面的要用0t pivot-1-lowQSort(p + pivot + 1, 0, high - pivot - 1);}
}void QuickSort(int (&a)[9]){int asize = sizeof(a) / sizeof(a[0]);//取数组的大小int *p = a;//指针p指向a的首地址QSort(p, 0, asize - 1);
}int main(){ int a[] = { 5, 1, 9, 3, 7, 4, 8, 6, 2 };cout << "before sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出 cout << a[i] << " ";}cout << endl;QuickSort(a);cout << "after sorted:" << endl;for (size_t i = 0; i < 9; ++i){//输出cout << a[i] << " ";}cout << endl;return 0;
}

运行结果:

QuickSort 快速排序相关推荐

  1. JavaScript实现QuickSort快速排序算法(附完整源码)

    JavaScript实现QuickSort快速排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 QuickSort .js完整源代码 Comparator.js完 ...

  2. JAVA:实现QuickSort快速排序算法(附完整源码)

    JAVA:实现QuickSort快速排序算法 package com.thealgorithms.sorts;import static com.thealgorithms.sorts.SortUti ...

  3. 【算法图文动画详解系列】QuickSort 快速排序算法

    快排简介 快速排序(Quicksort)是对冒泡排序算法的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的 ...

  4. [转载] [硕.Love Python] QuickSort(快速排序)

    参考链接: Python中的Quicksort def partition(a, i, j): k = -1 while True: while k * (a[i] - a[j]) >= 0: ...

  5. quicksort java_Java代码实现快速排序(QuickSort)

    Java代码实现快速排序(QuickSort) 核心思想 如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点). 我们遍历p到r之间的数据,将小于pivo ...

  6. java 概率 算法_使用概率算法优化快速排序(JAVA)

    前言 前面一篇文章系统介绍了快速排序算法,提到快速排序虽然平均时间复杂度为o(n*log2(n)),效率相对比较高.但是其在特殊情况下,比如降序的情况下,效率和冒泡排序一致,这就削弱了快速排序给人的好 ...

  7. Java排序算快速排序_Java排序算法 [快速排序]

    package cn.com.dom4j.sort; public class QuickSort { /** 快速排序 在 Java中, 快速排序被用作基本数据类型的排序 (当然, 不只快速排序一种 ...

  8. 【排序算法】快速排序(Quick Sort)

    快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...

  9. python分析基金数据,[Python数据分析]numpy基金会,基础

    数组属性 ndim与shape的区别 ndim 轴的数量,即从外到内的层数(axis=0为最外层) shape 每层数组的元素,返回一个元组,其长度即为ndim,比如(2,2,3)表示axis=0,有 ...

最新文章

  1. Mac OS X 系统自带的截图快捷键有哪些?
  2. python 类的继承,类中的函数调用以及类输入数组
  3. spring boot 修改 jackson string的null为空字符串
  4. 为什么 kubernetes 天然适合微服务
  5. Python笔记-Collection中Iterable、Iterator和Generator的区别
  6. 子集生成 --二进制法
  7. php 创建短地址 (var_export)
  8. html5 机构化元素
  9. 网页中嵌入swf文件的几种方法
  10. 矢量 路网 免费下载_50个免费矢量图片下载网站
  11. 如何在Ubuntu 20.04上使用Seafile同步和共享文件
  12. NSDate中夏令时的坑你知道吗
  13. 第九章泛型与集合(甘琳凤)
  14. N叉树的所有路径搜索
  15. 我如何转变了我的YouTube推荐供稿
  16. App 上线被拒绝的原因有哪些
  17. 荣耀变局之下,国产智能手机九年往事
  18. android 微信分享注册链接显示app的logo出现黑边处理方案
  19. html项目的致谢词,毕业论文致谢词范文200字(精选10篇)
  20. C语言实现网络聊天室 socket的简单应用

热门文章

  1. 特征因子是什么意思_【空间分析】地理探测器应用-分异及因子探测、交互作用探测(共享单车骑行目的地时空特征与影响因素)...
  2. 执行h2o的python命令时出现:TypeError: ‘NoneType‘ object is not callable
  3. [有限元]证明常应变三角形单元形函数面积分线积分公式
  4. 网络工程师为什么要学python_网络工程师学python
  5. 解决:Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  6. 天气预报API接口 : 城市对应码(中国天气网)
  7. WordPress暗黑极客主题Lotus1.1
  8. PHP付费资源下载交易平台网站源码
  9. Linux下删除mysql实例,linux下完全删除mysql
  10. wetech-cms内容管理系统源码