| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 398 人关注过本帖
标题:c语言 快速排序 求解疑
取消只看楼主 加入收藏
可瑞贼
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2010-12-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
c语言 快速排序 求解疑
#include<stdio.h>
#define SWAP(x,y){int t=x;x=y;y=t;}

void qs(int number[],int left,int right) {
int i,j,s;
if(left<right){
 s=number[left];
 i=left;
 j=right+1;

 while(1){
 while(i+1<10&&number[++i]<s);
 while(j-1>-1&&number[--j]>s);
 if(i>=j)
 break;

 SWAP(number[i],number[j]);
 }

 number[left]=number[j];
 number[j]=s;

 qs(number,left,j-1);
 qs(number,j+1,right);

  }
 }
 main()
 {
 int k;
 int a[10]={41,24,76,11,45,64,21,69,19,36};
 qs(a,0,9);

 for( k=0;k<10;k++){
 printf("%d\n",a[k]);
 }
 getch();
 }

其中 有2个语句不理解:
 number[left]=number[j];
 number[j]=s;
我知道 这是在把中枢轴的值与 最小的值交换  但我认为是  number[left]=number[i];   number[i]=s;  因为 上面swap(a[i],a[j]) 不是已经不是交换了吗??  例如  下面的   41和 21交换

透过以下演算法,则轴左边的值都会小于s,轴右边的值都会大于s,如此再对轴左右两边进行
递回,就可以对完成排序的目的,例如下面的实例,*表示要交换的数,[]表示轴:
[41] 24 76* 11 45 64 21 69 19 36*
[41] 24 36 11 45* 64 21 69 19* 76
[41] 24 36 11 19 64* 21* 69 45 76
[41] 24 36 11 19 21 64 69 45 76
21 24 36 11 19 [41] 64 69 45 76




搜索更多相关主题的帖子: c语言 
2011-05-02 12:44
可瑞贼
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2010-12-9
收藏
得分:0 
快来人啊
2011-05-02 12:59
可瑞贼
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2010-12-9
收藏
得分:0 
回复 3楼 laoyang103
看过了   但就这个细节 不理解
2011-05-02 19:30
快速回复:c语言 快速排序 求解疑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved