排序快速排序

Posted wanglei5205

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序快速排序相关的知识,希望对你有一定的参考价值。

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

本文代码的github地址

# 基本思想

      ”快速排序“是对”冒泡排序“的改进。

      基本原理:基于分治法,在待排线性表中取一个元素pivot作为枢轴值,通过一趟排序将待排线性表划分为独立的两部分,第一部分的所有元素小于pivot,第二部分的所有元素大于等于pivot,pivot位于其最终位置。递归对两个子表做快速排序。

# C++代码

  1 #include <iostream>
  2 #include <vector>
  3 using namespace std;
  4 
  5 // 一次快速排序
  6 int partition(vector<int> &a, int low, int high)
  7 {
  8     // 枢轴值(线性表第一个元素作为枢轴值)
  9     int key = a[low];
 10     while(low < high)
 11     {
 12         // 从右侧中找小于pivot的值,然后覆盖low位置
 13         while(low < high && a[high] >= key)
 14             --high;
 15         a[low] = a[high];
 16 
 17         // 从左侧中找大于pivot的值,然后覆盖high位置
 18         while(low < high && a[low] <= key)
 19             ++low;
 20         a[high] = a[low];
 21     }
 22     a[low] = key;
 23     return low;
 24 }
 25 
 26 //快速排序的递归形式
 27 void QuickSort(vector<int> &a, int low, int high)
 28 {
 29     if(low < high)
 30     {
 31         int loc = partition(a, low, high);//一趟排序结果的调用
 32         QuickSort(a, low, loc-1);
 33         QuickSort(a, loc+1, high);
 34     }
 35 }
 36 int main()
 37 {
 38     vector<int> a={46,79,56,38,40,84};
 39     QuickSort(a, 0, a.size()-1);
 40     for(int i=0;i<a.size();++i) cout<<a[i]<<‘ ‘;
 41     return 0;
 42 }

以上是关于排序快速排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言快速排序代码

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

交换排序(冒泡排序快速排序的算法思想及代码实现)

列举你所知道的排序方法,请写出快速排序的伪代码

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)