首页 > 其他 > 详细

快速排序(Quick Sort)

时间:2014-03-27 01:49:22      阅读:545      评论:0      收藏:0      [点我收藏+]

算法介绍

  设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]赋给A[j];
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[j]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
 

示例代码

bubuko.com,布布扣
#include<iostream>
using namespace std;

int data[8]={5,2,3,1,8,7,6,4};

void myQuickSort(int ds[],int start,int end){
    
    if(start>=end) return;

    int i=start,j=end;
    int key=ds[i];

    while(i<j && ds[j]>key)
        j--;
    ds[i]=ds[j];
    
    while(ds[i]<key && i<j)
        i++;    
    ds[j]=ds[i];
    ds[i]=key;    
    
    myQuickSort(ds,start,i-1);    
    myQuickSort(ds,i+1,end);
    
}

int main(){
    myQuickSort(data,0,7);
    for(int i=0;i<8;i++)
        cout<<data[i]<<" ";
    getchar();
    return 0;
}
bubuko.com,布布扣

快速排序(Quick Sort),布布扣,bubuko.com

快速排序(Quick Sort)

原文:http://www.cnblogs.com/seair/p/3626830.html

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