1.思想就是递归的分而治之,每次递归就做两件事:分段,对这个段依照pivot进行粗略的排序

2.对于分好的段,求出其中位数为pivot,然后小于pivot的全都放到这个段的左边,大于pivot的全都放到这个段的右边,下面是实现代码

#include<stdio.h>
#include<stdlib.h> template <typename T> class QuickSort
{private:void swap(T &a,T &b)//交换两个参数的值 {T   t;t = a;a = b;b = t;}int medium3(T *data,int left,int right)//求出pivot,并且排序 {int center = (left+right)/2;if(data[left]>data[center])swap(data[left],data[center]);if(data[left]>data[right])swap(data[left],data[right]);if(data[center]>data[right])swap(data[center],data[right]);//data[center]为pivotswap(data[center],data[right-1]);return data[right-1];}void     Qsort(T *data,int left,int right){if(right-left<2) return; //递归结束 int pivot = medium3(data,left,right);//求出这个段的中位数int i=left,j = right-1;while(1){while(data[++i]<pivot){;}while(data[--j]>pivot){;}if(i<j){swap(data[i],data[j]);}else{break;}}swap(data[i],data[right-1]);Qsort(data,left,i-1);Qsort(data,i+1,right);}public:void Quicksort(T *data,int n){Qsort(data,0,n-1);}};
int main()
{  int     d[]={4,6,1,3,9,100,-90};/待排序的数组QuickSort<int>  qs;//创建快排模板类qs.Quicksort(d,7);//调用排序成员函数for(int i=0;i<7;i++) printf("%d\t",d[i]);return 0;
} 

C/C++实现快速排序相关推荐

  1. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构学习(十三)、快速排序

    基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...

  4. 快速排序(快排)--->注释超详细

    基本思想:         1.先选取一个基准值(一般选取数组第一个元素).         2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...

  5. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  6. 【经典算法】快速排序

    与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...

  7. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

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

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

  9. 排序学习之---快速排序

    一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...

  10. java 冒泡排序和快速排序 实现

    面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现. 冒泡排序 基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒.按照排序规则进行比较,如 ...

最新文章

  1. HarmonyOS系统概述
  2. Linux学习(十三)---搭建JavaEE环境
  3. firefox的plugin-container.exe进程如何关闭?
  4. 实时人脸关键点源码推荐
  5. 数据库常用语句(日常填充)
  6. 让你了解什么是内存屏障
  7. 计算机中隐藏的文件找不到了怎么办,我的计算机找不到隐藏文件,是怎么回事啊...
  8. javascript中alert函数的替代方案,一个自定义的对话框的方法(引用)
  9. C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP)
  10. GitHub上12k Star的《Java工程师成神之路》中终于开放阅读了!
  11. 方格取数(1)(HDU-1565)
  12. 如何使用vue使同一个弹窗同时能实现添加和编辑
  13. 查看现有运行的linux服务器有多少内存条
  14. mybatis将字段改为null_【MyBatis入门到入土精讲】MyBatis介绍
  15. python中oserror winerror_python – OSError:[WinError87]参数不正确
  16. 蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数
  17. macOS用的是linux系统吗
  18. 详解mysql备份恢复的三种实现方式
  19. 2021年3月20日美团笔试
  20. QQ样式的在线客服代码

热门文章

  1. TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable
  2. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略
  3. BlockChain:《Blockchain Gate》听课笔记——以POW机制为例阐述共识机制的激励相容设计
  4. [入门]C#语法里面,如何使用 VB的常用函数?(using Microsoft.VisualBasic)
  5. javascript闭包学习
  6. 上传本地代码到gitHub过程详解
  7. a, b = b, a+b
  8. sql server日期时间函数
  9. 关于内存管理/set/get方法
  10. [转+总结]Linux虚拟系统安装VMware Tools总结