#include <stdio.h>#include <stdlib.h>// #define SWAP(a,b) \// {\// (a) = (a) ^(b);(b) = (b) ^ (a);(a) = (a) ^ (b);\// }void swap(int *a, int *b){int tmp;tmp = *a;*a = *b;*b = tmp;}int partition(int * arr,int left,int right){int pivotkey;pivotkey = arr[left];while(left<right){// 从右往左找,比关键字小的值,交换后right指向关键字while(left<right && arr[right]>=pivotkey) right--;//SWAP(arr[left],arr[right]);swap(&arr[left],&arr[right]);//从左边找,比关键字大的值,交换后left指向关键字while(left<right && arr[left]<=pivotkey) left++;swap(&arr[left],&arr[right]);//SWAP(arr[left],arr[right]);}return left;}void qSort(int * arr, int left, int right){int par;if (left<right){par = partition(arr,left,right);qSort(arr,left,par-1);qSort(arr,par+1,right);}}void quickSort(int *arr,int size){qSort(arr,0,size-1);}void print(int *arr,int size){int i;for (i = 0; i < size; ++i){printf("%d ",arr[i]);}printf("\n");}int main(int argc, char const *argv[]){int arr[] = {2,3,4,1,5,8,6,10,9,7};int size = sizeof(arr)/sizeof(arr[0]);quickSort(arr,size);print(arr,size);return 0;}
//方法二
#include <stdio.h>#include <stdlib.h>// #define SWAP(a,b) \// {\// (a) = (a) ^(b);(b) = (b) ^ (a);(a) = (a) ^ (b);\// }void swap(int *a, int *b){int tmp;tmp = *a;*a = *b;*b = tmp;}int partition(int * arr,int left,int right){int pivotkey;int temp;pivotkey = arr[left];temp = pivotkey;while(left<right){// 从右往左找,比关键字小的值,交换后right指向关键字while(left<right && arr[right]>=pivotkey) right--;//SWAP(arr[left],arr[right]);//swap(&arr[left],&arr[right]);arr[left] = arr[right];//从左边找,比关键字大的值,交换后left指向关键字while(left<right && arr[left]<=pivotkey) left++;//swap(&arr[left],&arr[right]);//SWAP(arr[left],arr[right]);arr[right] = arr[left];}arr[left] = temp;return left;}void qSort(int * arr, int left, int right){int par;if (left<right){par = partition(arr,left,right);qSort(arr,left,par-1);qSort(arr,par+1,right);}}void quickSort(int *arr,int size){qSort(arr,0,size);}void print(int *arr,int size){int i;for (i = 0; i < size; ++i){printf("%d ",arr[i]);}printf("\n");}int main(int argc, char const *argv[]){int arr[] = {2,3,4,1,5,8,6,10,9,7};int size = sizeof(arr)/sizeof(arr[0]);quickSort(arr,size);print(arr,size);return 0;}