快速排序算法


基本思路是:取數組的中間值作爲參考數,將數組分成兩部分,左邊是小於參考數的,右邊是大於參考數的。每一次的調用完成一個數據的位置確定。通過遞歸循環調用完成所有數據的位置確定。

難點:函數遞歸調用。

代碼:

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

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章