码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序算法

时间:2016-06-16 00:07:30      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:算法


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

难点:函数递归调用。

代码:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!