快速排序采用了一种分治的策略,该方法的基本思想是:
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);
}