码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2019-08-17 18:13:21      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:ace   代码   src   有序   name   通过   pac   改进   quic   

快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

快速排序的一般步骤:

1:在数组中选取一个基数,一般选取第一个数为基数。

2:(记数组的左端为 i 右端为 j)从右往左遍历(j--),找到第一个小于基数的数,将其放在基数的左边;

3:从左往右遍历(i++),找到第一个大于基数的数,将其放在上一步找到的小于基数的数的位置;

4:返回第二步,直到所有的数都有序;

图解:

技术图片

c++代码:

#include<iostream>
using namespace std;
void quick_sort(int A[],int left,int right)
{
    if(left<right)
    {
        int i=left;
        int j=right;
        int x=A[left];
        while(i<j)
        {
            while(j>i&&A[j]>x)//从右往左遍历,找到第一个比x小的数 
                j--;
            if(j>i) A[i++]=A[j];//将该数放到x的位置 
            while(j>i&&A[i]<x)//从左往右遍历,找到第一个比x大的数 
                i++;
            if(j>i) A[j--]=A[i];//将该数放到上一个比x小的数的位置 
         }      
         A[i]=x;//将x放到当前i的位置 
        quick_sort(A,left,i-1);//递归回去排x前面的数 
        quick_sort(A,i+1,right);//递归回去排x后面的数 
    }
 } 
 int main()
 {
     int A[]={2,4,5,1,3};
     quick_sort(A,0,4);
     for(int i=0;i<5;i++)
       cout<<A[i]<<" ";
       return 0;
 }

 

快速排序

标签:ace   代码   src   有序   name   通过   pac   改进   quic   

原文地址:https://www.cnblogs.com/zhoubo123/p/11369309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!