首页 > 编程语言 > 详细

【排序】快速排序

时间:2018-04-07 10:30:33      阅读:228      评论:0      收藏:0      [点我收藏+]

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

本文代码的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 }

【排序】快速排序

原文:https://www.cnblogs.com/wanglei5205/p/8732464.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!