标签:算法
基本思路是:取数组的中间值作为参考数,将数组分成两部分,左边是小于参考数的,右边是大于参考数的。每一次的调用完成一个数据的位置确定。通过递归循环调用完成所有数据的位置确定。
难点:函数递归调用。
代码:
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);
}
本文出自 “11550563” 博客,谢绝转载!
标签:算法
原文地址:http://11560563.blog.51cto.com/11550563/1789626