| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 475 人关注过本帖
标题:快速排序遇到的小问题
只看楼主 加入收藏
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
快速排序遇到的小问题
程序代码:
#include<stdio.h>

#define N 10

void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);

int main(void)
{
    int a[N], i;
    
    printf("Enter %d numbers to be sorted:",N);
    for (i = 0; i < N; i++)
      scanf("%d",&a[i]); 
      
    quicksort(a, 0, N - 1);
    
    printf("In sortrd order:");
    for (i = 0; i < N; i++)
      printf("%d ",a[i]);
    printf("\n");          
    
    return 0; 
}
void quicksort(int a[], int low, int high)
{
    int middle;
    
    if(low >= high)   return;    //(1)关于这个return的返回问题,它会返回一个什么值呢
    middle = split(a, low, high);
    quicksort(a, low, middle - 1);
    quicksort(a, middle + 1, high);
    
}
int split(int a[], int low, int high)
{
    int part_element = a[low];
    while(1){
    
       while(low < high && part_element < a[high])   
       
       high--;
       if(low >= high)     break;
       a[low++] = a[high];
    
      while(low < high && a[low] <= part_element)   
       
       low++;
       if(low >= high)     break;
       a[high--] = a[low];    
    
}
    a[high] = part_element;
    return high;
}

书上的一道快速排序程序,当分析了原程序后,了解了算法。便自己根据书上的思维按印象来写,写完后,程序闪退无法运行,对比书上程序,发现是忘了(1)那行代码,分析之后,还是无法理解那个return会返回什么值,这个调试也无法看出那行的作用呀。。虚心求教
2015-09-20 01:20
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
是返回原quicksort(a, 0, N - 1);那个地方么,然后开始输出?还是?

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-20 01:32
小王KING
Rank: 2
等 级:论坛游民
威 望:1
帖 子:29
专家分:69
注 册:2015-9-9
收藏
得分:5 
void quicksort(int a[], int low, int high)      
{
    int middle;
   
    if(low >= high)   return;                  //
    middle = split(a, low, high);
    quicksort(a, low, middle - 1);
    quicksort(a, middle + 1, high);
   
}
这行的作用意义很明显啊,当low>=high结束本次函数调用啊,至于return返回什么,毫无意义,就好比while循环中加个break;是一样的道理啊
问这样的问题,说明你要么就是没真的看明白,要么就是没事找抽型的
2015-09-20 03:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
對聲明返回類型為void的函數,要提前結束函數,就用return語句;在函數末尾自然結束,可不用寫return,提前結束方要。

凡是聲明為void返回類型的,就是不需要返回的意思,此時什麼都不return回去,其實return什麼都是多餘的,因為編譯器根本就不使用你的返回値。這跟main()返回零或非零,操作系統都用不著是一個道理——有用就是有用的,沒用就是多餘的。printf()函數也有返回値,也沒見人用過來,恐怕連這函數有返回値都沒幾人知道。scanf()有返回値知道的人多點,但知道怎麼用的也不多。對這種情形,講究或強調return啥就是對牛談牛。

令狐沖學劍,岳不羣教一招一式嚴格使出,絲毫不能偏差,然而風清揚教導,則是變招之間可以自創過渡動作,甚至祗使到一半即變,都是不拘泥之意。不管是學劍還是學編程,資質不足以靈活變通者,即為廢物。守規矩的前提,是明白這個規矩派什麼用場,該守則守,不需守則無須死守,明白事理比嚴守規矩有用得多。

[ 本帖最后由 TonyDeng 于 2015-9-20 03:32 编辑 ]

授人以渔,不授人以鱼。
2015-09-20 03:30
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
回复 3楼 小王KING
嗯,昨天没想明白

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-20 11:58
达尔文
Rank: 2
等 级:论坛游民
帖 子:84
专家分:29
注 册:2015-8-22
收藏
得分:0 
回复 4楼 TonyDeng
明白啦

能有一件喜欢的事很不容易,就坚持下去吧.....
2015-09-20 11:59
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 

仰望星空...........不忘初心!
2015-09-20 12:12
快速回复:快速排序遇到的小问题
数据加载中...
 
   



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

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