void QuickSort(int a[],int low,int high); //对a[low]到a[high]由小到大排序
void QuickSort(int a[],int low,int high) { int pivot; int i=low,j=high; if(low<high){ pivot = a[low]; //将第一个元素作为枢轴 //接下来进行第一次partition
while(i<j){ while(i<j && a[j]>=pivot) //从右往左找到第一个小于枢轴的数
j--; if(i<j){ //将该数移动到左指针的位置
a[i] = a[j]; i++; } while(i<j && a[i]<pivot) //从左往右找到第一个大于等于枢轴的数
i++; if(i<j){ //将该数移动到右指针的位置
a[j] = a[i]; j--; } } a[i] = pivot; //循环退出时i == j即枢轴的位置 //递归处理当前枢轴的左右两部分
QuickSort(a,low,i-1); QuickSort(a,i+1,high); } } /* 算法分析: time-complexity: 最好情况下时间复杂度为O(nlog2n),待排序列接近无序,算法效率越高。 最坏情况下时间复杂度为O(n2),待排序列月接近有序,算法效率越低。 平均情况下时间复杂度为O(nlog2n); space-complexity O(log2n) *