算法基本思想:

第一步:
教官面对一列无序的队伍,他指着最右边的一个人A说:“比他高的站他右边,比他矮的站他左边。”
完成之后,队伍被他分割成了两列,第一列:比A矮的在A的左边;第二列:比A 高的在A 的右边。
第二步:
他首先处理第一列,指着在A的左边的一个人B(也就是第一列中的最右边的一个人)
说到:“比B高的站他右边,比B矮的站他左边”。这样完成之后,第一列又他成了两列。
同样的方法处理第二列,第二列也被分成两列。
第二步完成之后,序列变成了四列。教官又以上面的方法处理这四列,如此循环下去。。。
那什么时候递归停止呢?那就是当最后被分割成的小列中只有一个人的时候递归停止,不用再分了。
当然,上例中考官是以最右边的人为基准,进行分割的。你也可以随便指一个人作为基准进行分割。



算法的实现:

//---------QuickSort.h-----------// class QuickSort { const int arraySize; float * array; public: QuickSort(int arraySize); ~ QuickSort(); void Initital(); int Partition(int first, int last); void Quicksort(int first, int last); void Sort(); void PrintIt(); };

//-------------QuickSort.cpp------------// #include "iostream" #include "QuickSort.h" using namespace std; QuickSort::QuickSort(int Size):arraySize(Size) { } void QuickSort::Initital() { array = new float[arraySize]; for(int i = 0; i < arraySize; i++) { cout << "Input the number " << i+1 << " : "; cin >> array[i]; } cout << "Entered !" << endl; } int QuickSort::Partition(int first, int last) { int i, j; j = first - 1; for(i = first; i < last; i++) //Partition的精华思想,把last当做是标准 { if(array[i] < array[last]) { j ++; float temp = array[i]; array[i] = array[j]; array[j] = temp; } } float temp = array[last]; array[last] = array[++j]; array[j] = temp; return j; } void QuickSort::Quicksort(int first, int last) { int pivot; if(first < last) //算法的基本实现 { pivot = Partition(first, last); Quicksort(first, pivot - 1); Quicksort(pivot + 1, last); } } void QuickSort::Sort() { Quicksort(0, arraySize - 1); } void QuickSort::PrintIt() { cout << "After QuickSort :" << endl; for(int i = 0; i < arraySize; i ++) { cout << array[i] << " "; } cout << endl; } QuickSort::~QuickSort() { delete []array; }//------------main.cpp------------// #include "iostream" #include "QuickSort.h" using namespace std; int main() { int size; cout << "Enter the size of the array : "; cin >> size; if(size > 0) { QuickSort sort(size); sort.Initital(); sort.Sort(); sort.PrintIt(); system("pause"); } return 0; }

感想:

本文算法只是一个QuickSort的模板,可以根据情况来灵活应变,当然也有许多地方可以优化,在这就不再多述了

转载于:https://www.cnblogs.com/kedebug/archive/2009/12/09/2791763.html

C++实现快速排序算法QuickSort()相关推荐

  1. 快速排序算法QuickSort(二)

    1.说明 这个快速排序算法是对前面的 快速排序算法QuickSort  一种改进. 只是修改了int Partition(int arry[],int start,int end)这个方法. 2.思路 ...

  2. 快速排序算法quickSort

    最简单的快速排序算法 #include <iostream> #include <vector> #include <algorithm> using namesp ...

  3. 快速排序算法Quicksort()

    快速排序的思想是用数组的首元素作为标准将A划分成前后两部分,比首元素小的元素构成数组的前部分,比首元素大的元素构成数组的后部分,这两部分构成两个新的子问题,算法接着分别对这两部分递归进行排序 伪代码: ...

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

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

  5. 交换排序-经典的快速排序算法总结

    时间复杂度,平均O(nlogn),最坏O(n): 不稳定的算法 1.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide ...

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

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

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

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

  8. 经典算法—快速排序(Quicksort)使用详解

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

  9. 快速排序算法实现思想个人理解

    一.概述 快速排序是冒泡排序的改进算法.它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面, ...

最新文章

  1. oracle同义词truncate,详解Oracle DELETE和TRUNCATE 的区别
  2. adapter对象的更新操作
  3. Atitit 电子商务订单号码算法(java c# php js 微信
  4. 2018CVPR:Non-local Neural Networks(自注意力机制捕获远程依赖)
  5. Cocos2d-lua中lua代码加密成luac
  6. 苹果笔记本没有计算机管理员,Mac管理员账户丢失怎么办
  7. nvme-cli tool 刷FW(固件)
  8. 砸蛋程序php,基于JQuery+PHP编写砸金蛋中奖程序,jquery中奖_PHP教程
  9. built a JNCIS LAB系列:Chapter 1 Autonomous System Paths v1.0
  10. 全文搜索引擎solr使用说明
  11. 用卡尔曼滤波器跟踪导弹(量测更新频率与时间更新频率不相等)
  12. mac python3 调用 .so_Mac OS X链接.so文件到动态库
  13. 万用表测量二极管方法
  14. 大唐:我家阁楼通公主府(三)
  15. 美国入境前的EVUS登记图文指南
  16. 华东师范大学提前面试历年真题领取
  17. 《新概念》英语的学习方法(完整版)
  18. 济南大学计算机专业就业前景好,计算机进入“十大热门专业”,未来缺口大,这3所大学值得报考...
  19. 倍福--连接欧姆龙EtherCAT伺服配置
  20. adb复制root到手机,怎样通过adb命令来root手机

热门文章

  1. 集成ACEGI 进行权限控制
  2. aio 爬虫,去重,入库
  3. IoT半导体购并案效果难现 服务器合作案后来居上
  4. 【回文自动机】bzoj3676 [Apio2014]回文串
  5. 特性(property)
  6. linux网络配置及IP绑定
  7. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败...
  8. 丢失或损坏NDF文件如何附加数据库
  9. nagios+cacit 整合(rpm)
  10. getopt();getopt_long();getopt_long_only();option