搜索
首页 电脑/网络 程序设计 C/C++

快速排序的问题

  我看了快速排序的方法。定义中间值是a[0],写个sortleft()函数,从左边开始如果有比中间值大的就交换,写个sortright()函数,从右边开始如果有比中间值小的就交换。再写个sort()让它先调用sortleft()函数,在调用sortright()函数,别且重复运行n/2次(我觉得反复交换n/2次应该差不多达到目的了吧)。
  我有个疑问即使这样排完了可能会出现, ,(中间值是5)这种情况啊,是不是312再用一次sort函数,987再用一次,我觉得是递归吧,具体应该怎么写呢?。

全部回答

2009-11-27

0 0
    快速排序,左右不能分开写,就是用本函数
    看我的代码 : //快速排序时分区 int partition(int *data, int low, int high) { int pivot=data[low];//基准 while(low data[low]) ++low; if(low<high){ data[high]=data[low]; high--; //交换后要减 1 } } data[low]=pivot; return low; } //分治法实现快速排序 void fastsort(int *data, int low, int high) { if(low < high){ int pivot_index = partition(data,low,high); fastsort(data,low,pivot_index-1); fastsort(data,pivot_index+1,high); } }。

2009-11-22

68 0
如果用递归的话,一般不会分开写sortleft和sortright,而是统一写一个 void QuickSortIterative(int start,int end,int * arr) 递归调用里面改变 start 和 end 实现。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
硬件
电脑装机
程序设计
互联网
操作系统/系统故障
笔记本电脑
反病毒
百度
软件
程序设计
C/C++
VB
数据库
汇编语言
JAVA相关
VC++
C#/.NET
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报