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

排序算法(二)-快速排序

时间:2015-10-18 22:42:18      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

快速排序就是随意找个基准数(就是一个用来参照的数,看下面就知道做什么的了)。在一个数组a[10]中随意找个数,假如这个数是a[0]=8。方法很简单,从右向左找一个小于8的数,从左向右找一个大于8的数,然后交换他们。这里可以用两个变量ij,分别指向数列的最左面和最右面,首先j出动,因为我们这里的基准数是最左面的数,所以j先出动,然后j一步步的往左走,直到找到小于8的数;之后i一步步往右走,直到找到大于8的数,然后交换ij指向的值。就这样交换交换交换,直到ij相等,当ij相等时,交换a[0]i/j指向的数。这一次的最后的结果就是8到了最终结果的正确位置。现在第一轮结束,以8为分界点,将这个数组分成两组,对这两组分别进行上述过程,直到数字全部归位。快速排序的秘诀就是每一轮将一个数归位(即将基准数排到最后结果的正确位置)。

下面将上述功能实现,看下代码能不能看懂

#include <iostream>

using namespace std;

void QuickSort(int *p,int left,int right)
{
    int *q=p;//保存数组首项的地址,因为要递归,每次都应该传这个数组的首项

    if(left>right)
        return;
    int i=left;
    int j=right;
    int temp=p[i];

    while(i<j)
    {
        while(i<j&&temp<=p[j])
            j--;
        while(i<j&&temp>=p[i])
            i++;

        if(i!=j)
        {
            int t=p[i];
            p[i]=p[j];
            p[j]=t;
        }
    }
    p[left]=p[i];
    p[i]=temp;

    p=q;//将数组首项的地址重新给p
    QuickSort(p,left,i-1);//二分法,递归
    QuickSort(p,i+1,right);
}


 

排序算法(二)-快速排序

标签:

原文地址:http://www.cnblogs.com/mengnan/p/4890418.html

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