#include <stdio.h>
#include <stdlib.h>
void swap(int* x,int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int partition(int arr[],int start,int end)
{
int temp = arr[end];
int i = start - 1;
int j ;
for(j = start;j < end;j++)
{
if(arr[j] <= temp)
{
i++;
swap(&arr[i],&arr[j]);
}
}
swap(&arr[i + 1],&arr[end]);
return i + 1;
}
void quickSort(int arr[],int start,int end)
{
if(start < end){
int mid = partition(arr,start,end);
quickSort(arr,start,mid - 1);
quickSort(arr,mid + 1,end);
}
}
//wiki
void quick_sort_recursive(int arr[],int start,int end)
{
int left = start;
int right = end - 1;
int mid = arr[end];
if(start >= end) return;
while(left < right){
while(left < right && arr[left] < mid){
left++;
}
while(left < right && arr[right] >= mid){
right--;
}
printf("left=%d,right=%d\n",left,right);
swap(&arr[left],&arr[right]);
}
if(arr[left] >= arr[end]){ //arr[left]一定是大于arr[end],因为left = right 而right就是找到的比arr[end]大的值,除非arr[end]最大
swap(&arr[left],&arr[end]);
}else{
left++;
// swap(&arr[left],&arr[end]);
printf("arr[left]=%d\n",arr[left]);
}
if(left){
quick_sort_recursive(arr,start,left - 1);
}
quick_sort_recursive(arr,left + 1,end);
}
void quick_sort(int arr[],int len)
{
quick_sort_recursive(arr,0,len - 1);
}
int main()
{
int arr [9] = {1,7,5,2,4,13,11,10,14};
int i;
//for(i =0;i<10;i++){
// arr[i] = random();
//}
printf("开始排序\n");
//quick_sort(arr,9);
quickSort(arr,0,8);
printf("排序完成\n");
for(i=0;i<9;i++){
printf("%d ",arr[i]);
}
;printf("\n");
return 0;
}