刚接触数据结构,求解关于快速排序的问题。大神们帮忙看看~~~~

w294693164 2012-03-27 07:52:16
这段代码把基准写死为第一位,怎么把基准数可以随意做修改,但是排序的区间最后还是0,N。没有思路,加个参数可以吗?大神们帮忙看看
#include <iostream>
using namespace std;
int iarray[9]={9,45,0,6,10,2,5,7,3};
//快速排序
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[i];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
int main()
{
quick_sort(iarray,0,8);
for(int i=0;i<sizeof(iarray)/sizeof(iarray[0]);i++)
cout<<iarray[i]<<" ";
return 0;
}
...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
原来是随机选个标杆元素.....
cattycat 2012-03-27
  • 打赏
  • 举报
回复
void
quick_sort (int *array, int begin, int end)
{
int r = end;
int k = begin + 1;
int mark;
if (begin >= end) return;
/* 随机选择“基准“ */
mark = rand() % (end - begin + 1) + begin;
swap(&array[begin], &array[mark]);
while (k < r) {
if (array[begin] > array[k]) {
k++;
} else {
swap(&array[k], &array[r]);
r--;
}
}
if (array[k] < array[begin]) {
swap(&array[k], &array[begin]);
quick_sort(array, begin, k-1);
quick_sort(array, r, end);
} else {
swap(&array[--k], &array[begin]);
quick_sort(array, begin, k-1);
quick_sort(array, r, end);
}
return;
}

这个是从网上给你找的,其实就是随机选一个和第一个交换,然后和你那个一样了。
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
quick_sort(iarray,0,8);
你这里可以随你输入区间啊,如果你只想对部分排序的话
w294693164 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenyuming307 的回复:]

http://www.cnblogs.com/chenyuming507950417/archive/2011/12/31/2297990.html
[/Quote]

你的代码也是以第一位为基准数的 啊啊..
深圳大哥 2012-03-27
  • 打赏
  • 举报
回复
http://www.cnblogs.com/chenyuming507950417/archive/2011/12/31/2297990.html
w294693164 2012-03-27
  • 打赏
  • 举报
回复
召唤大神召唤大神........

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧