请教一段看不懂的排序的代码!

神的理想 2013-05-06 04:31:14
下面这段快排代码运行结果看起来是正确的,但是其中的数据交换,为什么看起来感觉是把已有的数据给覆盖掉了,但是如果输出结果又是争取的了?

//快速排序;
void quick_sort(int arr[], int _left, int _right)
{

if (_left < _right)
{
int left = _left, right = _right, x = arr[_left];

while(left < right)
{
// 从右向左找第一个小于x的数;
while(left < right && arr[right] >= x)
right--;

if(left < right)
arr[left++] = arr[right]; //这里

// 从左向右找第一个大于等于x的数;
while(left < right && arr[left] < x)
left++;

if(left < right)
arr[right--] = arr[left];//和这里
}
arr[left] = x;
// 递归调用 ;
quick_sort(arr, _left, left - 1);
quick_sort(arr, left + 1, _right);
}

}


void test_quick_sort(void)
{
int aa[50] ={5,23,12,143,80,69,8,12,32,619,
15,23,312,413,30,26,8,212,72,119,
59,36,122,3,17,86,18,32,62,29,
25,29,1,243,40,6,118,52,11,19,
35,13,92,432,18,36,84,112,23,39,};
quick_sort(aa,0,49);
for(int i = 0 ; i<50; i++)
{
cout<<aa[i]<<" ";
}
}
...全文
72 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
starytx 2013-05-06
  • 打赏
  • 举报
回复
因为有个x先把arr[_left]的值保存起来了
ouyh12345 2013-05-06
  • 打赏
  • 举报
回复
输出每一步的结果,看看具体是怎么排序的

64,639

社区成员

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

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