#include<iostream>
using namespace std;
void quickSort(int a[],int,int);
int main()
{
int array[]={34,65,12,43,67,5,78,10,3,70},k;
int len=sizeof(array)/sizeof(int);
cout<<"The orginal arrayare:"<<endl;
for(k=0;k<len;k++)
cout<<array[k]<<",";
cout<<endl;
quickSort(array,0,len-1);
cout<<"The sorted arrayare:"<<endl;
for(k=0;k<len;k++)
cout<<array[k]<<",";
cout<<endl;
system("pause");
return 0;
}
void quickSort(int s[], int l, int r)
{
if (l< r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
method2:
int RandomInRange(int start ,int end)
{
if(end>start)
{
srand(time(NULL));// srand函数是随机数发生器的初始化函数,使得随机数种子随时间的变化而变化
return start+rand() %((end-start));//产生start~end之间的随机数
}
return 0;
}
void swap_element(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int Partition(int data[],int length,int start,int end)
{
if(data==NULL || length<=0||start<0 || end>=length)
{
cout<<"error1!"<<endl;
exit(0);
}
int index=RandomInRange(start,end);
swap_element(&data[index],&data[end]);
int small=start-1;
for(index=start;index<end;index++)
{
if(data[index]<data[end])
{
++small;
if(small != index)
{
swap_element(&data[index],&data[small]);
}
}
}
++small;
swap_element(&data[small],&data[end]);
return small;
}
void Quicksort(int data[],int length,int start,int end)
{
if(start==end)
{
return ;
}
int index=Partition(data,length,start,end);
if(index>start)
Quicksort(data,length,start,index-1);
if(index<end)
Quicksort(data,length,index+1,end);
}