#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
typedef struct list{
int *p;
int len;
}S;
void Initialize(int *&p,int len){
srand(time(NULL));
int i;
for(i=0;i<len;i++){
p[i] = rand() % 100;
}
}
int quickchange(int *&p,int low,int high){ //直接交换原理(核心)
int pivot;
pivot = p[low];
while(low<high){ //low = high时循环结束
while(low<high && pivot<=p[high]){ //一定要加限制条件,因为可能存在最后几个未排序的元素全部都满足pivot<=p[high],则high会一直减下去直到负数
high--;
}
p[low] = p[high];
while(low<high && pivot>=p[low]){//不要以为外层循环有low<high,内层就可以不用加,不然high可以一直减下去
low++;
}
p[high] = p[low];
p[low] = pivot; //p[low] = p[high] = pivot
}
return low;
}
void QuickSort(int *&p,int low,int high){
if(low<high) {
int pivot;
pivot = quickchange(p, low, high);
QuickSort(p, low, pivot - 1);
QuickSort(p, pivot + 1, high);
}
}
void SPrint(int *p,int len){
int i;
for(i=0;i<len;i++){
printf("%d ",p[i]);
}
}
int main(){
S s;
s.len = 10;
s.p = (int *)malloc(sizeof(S)*s.len);
Initialize(s.p,s.len);
SPrint(s.p,s.len);
printf("\n");
QuickSort(s.p,0,s.len-1);
SPrint(s.p,s.len);
return 0;
}