基本思路是:取数组的中间值作为参考数,将数组分成两部分,左边是小于参考数的,右边是大于参考数的。每一次的调用完成一个数据的位置确定。通过递归循环调用完成所有数据的位置确定。

难点:函数递归调用。

代码:

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

{

while(nArray[l]

++l;

while(nArray[r]>nPivot && l

--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

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);

}