快速排序真的让人很迷惑,刚学完快速查找再想想快速排序,感觉不对劲,深入分析原来原因在于自己!!! ############### ## Author:钱国正 ## ############### #include "stdio.h" int a[]={9,23,5,1,67,0,55,90,6,4}; int partition(int low,int high,int a[]) { int temp=a[low]; //这里a[low]备份的变量已被保存,下面的a[low]=a[high] //的影响就没有了,是我以前愚钝,理解错了呵呵 while (low<high) //下面的整个循环都有事本算法的重点。很难理解。 { if (low<high && temp<=a[high]) //a[high]>=temp就不需要移动,high-- 移动high { high--; } a[low]=a[high]; //把刚刚移动过来的high付给a[low] if (low<high && a[low]<=temp)//如果a[low]<temp就low向后移//动,否则移动到a[high]; { low++; } a[high]=a[low]; } //以上过程反复,很有深意哦,不仔细看很难理解的。 a[low]=temp; //这里是复原数组,咱总不能把人家题意改了哈,呵呵 return low; } void quicksort(int low,int high,int a[]) { int pivotLoc=0; int i=0; if (low<high) { //这里就是快速算法的思想了,二分法,呵呵 pivotLoc=partition(low,high,a); quicksort(low,pivotLoc-1,a); quicksort(pivotLoc+1,high,a); } } int main() { int i; quicksort(0,9,a); for (i=0;i<=9;i++) { printf("%d ",a[i]); } printf("/n"); }