//快速排序
#include<stdio.h>
#define MAX 1024
int a[MAX];
void init(int b[],int n)
{
for(int i=0;i<n;i++)
a[i+1]=b[i];
}
//4,1,2,6,2,3,5,9,0
void qsort(int a[],int low,int high)
{
int i,j;
if(low<high)
{
i=low;
j=high;
a[0]=a[i];
while(i<j)
{
while(i<j && a[0]<a[j]) j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j && a[0]>a[i]) i++;
if(i<j)
{
a[j]=a[i];
// i++;
j--;
}
}
a[i]=a[0];
qsort(a,low,i-1);
qsort(a,i+1,high);
}
}
void display(int b[],int n)
{
for(int i=1;i<=n;i++)
printf("%d ",b[i]);
printf("/n");
}
int main()
{
int b[]={4,1,2,6,2,3,5,9,0};
int n=9;
int low=1;
init(b,n);
display(a,n);
qsort(a,low,n);
display(a,n);
return 0;
}
用舍伍德型概率算法改进的快速排序
#include<stdio.h>
#include<stdlib.h>
#define MAX 1000004
int Random(int a,int b)
{
return rand()%(b-a)+a; //生成随机数
}
void qqsort(int a[],int low,int high)
{
int i,j,x,k,temp;
if(low<high)
{
i=low;
j=high;
k=Random(i,j);
if(i!=k)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
x=a[i];//随机选择标志位
while(i<j)//i=0,j=10
{
while(i<j && x<a[j])
{ j--;}
if(i<j )
{
a[i]=a[j];
i++;
}
while(i<j && x>a[i])
{i++;}
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=x;
qqsort(a,low,i-1);
qqsort(a,i+1,high);
}
}
void display(int a[],int high)
{
for(int i=0;i<=high;i++)
printf("%d ",a[i]);
printf("/n");
}
int main()
{
int a[MAX];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int low=0,high=n-1;
// display(a,high);
qqsort(a,low,high);
display(a,high);
return 0;
}