#include <stdio.h>
#include <stdlib.h>
void quicksort(int data[],int i,int num);
void exchange(int data[],int i,int j);
int quickdepart(int data[],int begin,int end);
int main()
{
int nData[10] = {5,3,2,6,4,1,3,7}; //创建10个数据,测试
quicksort(nData, 0,7); //调用插入排序
for (int i = 0; i < 10; ++i)
{
printf("%d ", nData[i]);
}
printf("/n");
system("puase");
return 0;
}
void quicksort(int data[],int i,int num)
{
if(i>=num)
{
return;
}
else
{
int m=quickdepart(data,i,num);
quicksort(data,i,m);
quicksort(data,m+1,num);
}
}
void exchange(int data[],int i,int j)
{
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
int quickdepart(int data[],int begin,int end)
{
int x=data[begin];
int i=begin;
int j=end;
while(1)
{
while(data[i]<x)
{
i++;
}
while(data[j]>x)
{
j--;
}
if(i<j)
{
exchange(data,i,j);
i++;
j--;
}
else
return j;
}
}
之前出了点问题,在data[j]>x,这一步上,>=,终于找到问题所在,
快速排序的随机法就是在之间添加一个交换数据的
i=radom(p,r);
exchange(a[r],a[i]);