快速排序

来源:互联网 发布:php超链接输出成文本 编辑:程序博客网 时间:2024/06/07 20:45

快速排序采用了一种分治的策略,该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

代码如下:

// qsort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;int partition1(int *a,int start,int last){    int i=start,j=last;    int temp=a[start];    while(i<j)    {        while(i<j&&a[j]>=temp)            j--;        a[i]=a[j];        while(i<j&&a[i]<=temp)            i++;        a[j]=a[i];    }    a[i]=temp;    return i;}void qsort(int *a,int start,int last){    if(start<last){int middle=partition1(a,start,last);qsort(a,start,middle-1);qsort(a,middle+1,last);}}int main(){    int a[8]={1,32,52,19,81,8,19,32};    qsort(a,0,7);    for(int i=0;i<8;i++)        cout<<a[i]<<" ";    cout<<endl;    return 0;}



另外看到一个以中间节点作为基准点的方法,记录一下,代码如下:


void QuickSort(int data[],int lo,int hi){  int pivot,l,r,temp; l = lo;  r = hi;  pivot=data[(lo+hi)/2]; //取中位值作为分界值  while(l<r)   {    while(data[l]<pivot)    ++l;    while(data[r]>pivot)    --r;       if(l>=r)    break;    temp = data[l];    data[l] = data[r];    data[r] = temp;    ++l;    --r;   }  if(l==r)   l++;  if(lo<r)   QuickSort(data,lo,l-1);  if(l<hi)   QuickSort(data,r+1,hi); }


0 0
原创粉丝点击