//快速排序一是不是在语法上注意的更多 更容易错误??? //比较和体会两种算法的区别 //2012年4月11日 16:39:46 void quickSort(int list[],int left,int right)//快速排序一 { int i; int j; int pivot; if( left<right) { i=left; j=right+1;//以下i++,j--了一次,i是需要首先+1,但j不需要,所以此处需要提前+1,抵消 pivot=list[left]; do{ do{ i++; }while(list[i] < pivot);//第一次之后只有小于哨兵才+1,利于交换操作 do{ j--; }while(list[j] > pivot); if(i<j) { int temp=list[i]; list[i]=list[j]; list[j]=temp; } }while(i<j);//一般情况结束时left...j,i...right [j]<pivot,[i]>pivot所以交换left和j, //特殊情况结束时left......right,i=j=right+1//1,2,3,4,5,6,7 //即结束时,i后的都大于pivot,j前的都小于pivot,其中[j]<pivot,[i]>pivot if(1) { int temp=list[left]; list[left]=list[j]; list[j]=temp; } quickSort(list,left,j-1); quickSort(list,j+1,right); }//if( left<right) } void quickSort_(int list[],int left,int right)//快速排序二 { int i=left; int j=right; int temp=list[left]; while(i<j) { while(i<j&&list[j]>temp) { j--; } if(i<j) { list[i]=list[j]; i++; } while(i<j&&list[i]<temp) { i++; } if(i<j) { list[j]=list[i]; j--; } } list[i]=temp; if(left<i)//体会与快速排序一的区别 quickSort_(list,left,i-1); if(j<right)// quickSort_(list,j+1,right); }
转载于:https://www.cnblogs.com/zjhnl/archive/2012/04/03/2431061.html