#include<stdio.h>
#include<stdlib.h>
#define N 1000
void quicksort(int * array,int left,int right);
void quicksort2(int * array,int left,int right);
void main()
{
//int array[12]={3,2,5,1,3,9,8,7,3,6,10,20};
int array[N]={0};
for(int i=0;i<N;i++)
{
array[i]=10*rand();
}
quicksort2(array,0,N);
for(i=0;i<N;i++)
{
printf("%d ",array[i]);
}
printf("\n");
/*for(int i=0;i<100;i++)
{
//array[i]=rand();
}*/
}
//以中间一个数为基准 可以装换成以第一个为基准的 交换一下 就可以了
void quicksort(int * array,int left,int right)
{ int temp=0;
int privot=array[(left+right)/2];
int l=left;
int r=right;
while(l<r)
{
while(array[l]<privot) l++;
while(array[r]>privot) r--;
if(l>=r) break;
temp=array[l];
array[l]=array[r];
array[r]=temp;
if(array[l]==privot) --r;
if(array[r]==privot) ++l;
}
if(l==r)
{
++l;
--r;
}
if(left<r) quicksort(array,left,r);
if(right>l) quicksort(array,l,right);
}
//以第一个数为基准
void quicksort2(int * array,int left,int right)
{
int temp=array[left];
int l=left;
int r=right;
while(l<r)
{
while(l<r&&array[r]>=temp) --r;
array[l]=array[r];
while(l<r&&array[l]<=temp) ++l;
array[r]=array[l];
}
array[l]=temp;
if(l==r)
{
++l;
--r;
}
if(left<r) quicksort2(array,left,r);
if(right>l) quicksort2(array,l,right);
}
更多资源 http://www.17xuexiba.com