基本思路是:取數組的中間值作爲參考數,將數組分成兩部分,左邊是小於參考數的,右邊是大於參考數的。每一次的調用完成一個數據的位置確定。通過遞歸循環調用完成所有數據的位置確定。
難點:函數遞歸調用。
代碼:
void CArrayArithDlg::QuickSort(int nArray[],int nLeft,int nRight)//快速排序函數實現
{
int nPivot,nTemp,l,r;
l=nLeft;
r=nRight;
nPivot=nArray[(nLeft+nRight)/2]; //取中間值做參考
while(l<r)
{
while(nArray[l]<nPivot && l<r)
++l;
while(nArray[r]>nPivot && l<r)
--r;
if(l>=r)
break;
nTemp=nArray[l];
nArray[l]=nArray[r];
nArray[r]=nTemp;
if(nArray[l]!=nPivot)
++l;
if(nArray[r]!=nPivot)
--r;
}
if(nLeft<r)
QuickSort(nArray,nLeft,l); //數組分成的左邊的新"數組"的迭代
if(nRight>l)
QuickSort(nArray,r+1,nRight);//數組分成的右邊的新"數組"的迭代
}
void CArrayArithDlg::OnBnClickedQuicksort()
{
int array[6]={40,6,20,1,30,3};
int num=sizeof(array)/sizeof(int);
QuickSort(array,0,num-1);
CString s;
s.Format("%d-%d-%d-%d-%d-d",array[0],array[1],array[2],array[3],array[4],array[5]);
AfxMessageBox(s);
}