#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int& a , int& b);
int rand(int low, int high);
void quicksort(int* data, int low, int high) ;
int randpartition(int* data, int low , int high) ;
int main()
{
int arr[]={67,23,89,35,28,90,10,24};
quicksort(arr,0,7);
for(int i=0;i<8;i++)
printf("%d ",arr[i]);
}
void swap(int& a , int& b)
{
int temp = a;
a = b;
b = temp;
}
//取区间内随机数的函数
int rand(int low, int high)
{
int size = high - low + 1;
srand((unsigned) time(NULL)); 这里得加个seed随时间变化的种子
return low + rand()%size;
}
//快排的partition算法,这里的基准数是随机选取的
int randpartition(int* data, int low , int high)
{
swap(data[rand(low,high)], data[low]);//
int key = data[low];
int i = low;
for(int j=low+1; j<=high; j++)
{
if(data[j]<=key)
{
i = i+1;
swap(data[i], data[j]);
}
}
swap(data[i],data[low]);
return i;
}
//递归完成快速排序
void quicksort(int* data, int low, int high)
{
if(low<high)
{
int k = randpartition(data,low,high);
quicksort(data,low,k-1);
quicksort(data,k+1,high);
}
}
快速排序partition算法修正
最新推荐文章于 2021-10-18 01:23:56 发布