编辑代码

#include <stdio.h>

int Partition(int *arr,int low,int high){
	int pivot = arr[low];		//取第一个元素为枢轴
	while(low < high){
		while(low < high && arr[high] >= pivot) high--;	//从数组右边开始遍历比枢轴大时,不移动元素,high-- 
		arr[low] = arr[high];							//说明右边找到了一个比枢轴小的数,此时应该放入枢轴所在位置 
		while(low < high && arr[low] <= pivot) low++;	//从数组左边开始遍历比枢轴小时,不移动元素,low++
		arr[high] = arr[low];							//说明从左边找到了一个比枢轴大的数,此时应该放入前一次移动数据时,右边所在的空位	
	} 
	arr[low] = pivot;			//执行完前面循环后,当前low指向的位置就是pivot最终的位置
	return low; 
}

void QuickSort(int *arr,int low,int high){
	if(low < high){
		int pivotpos = Partition(arr,low,high);	//划分
		QuickSort(arr,low,pivotpos - 1);	//左边递归
		QuickSort(arr,pivotpos + 1,high);	//右边递归
	}
}

int main(){
	int arr[]={6,5,2,8,10,9};
	int len = sizeof(arr) / sizeof(int);
	QuickSort(arr,0,len - 1);
	for(int i = 0;i<len;i++){
		printf("%d ",arr[i]);
	}
	return 0;
}