亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7687 | 回復(fù): 8
打印 上一主題 下一主題

[C] 自學(xué)c語言過程中,看別人寫的代碼,有看不懂的地方,怎么解決? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-11-12 16:42 |只看該作者 |倒序?yàn)g覽
看c programming language 的過程中,看書上的算法實(shí)現(xiàn)程序,不明白,是直接跳過去,還是硬著頭皮啃下來呢?比如,下面用遞歸實(shí)現(xiàn)快速排序的函數(shù),從swap( v, left, (left + right) / 2)  這句之后,就不懂了。
  1. void qsort(int v[], int left, int right)
  2. {
  3.         int i, last;
  4.         void swap(int v[], int i,int j);
  5.         if(left >= right)
  6.                 return ;
  7.         swap(v, left, (left + right)/2);
  8.         last = left;
  9.         for(i = left +1; i <=right; i++)
  10.         {
  11.                 if(v[i] <v[left])
  12.                         swap(v, ++last, i);
  13.         }
  14.         swap(v,left,last);
  15.         qsort(v, left, last-1);
  16.         qsort(v, last+1, right);
  17. }

  18. void swap(int v[], int i, int j)
  19. {
  20.         int temp;
  21.         temp = v[i];
  22.         v[i] = v[j];
  23.         v[j] = temp;

  24. }
復(fù)制代碼

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2014-11-12 17:42 |只看該作者
很簡單,你用vs進(jìn)行單步調(diào)試,畫出流程圖,基本上就可以很好的 理解了

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2014-11-12 17:43 |只看該作者
1 如果你學(xué)過數(shù)據(jù)結(jié)構(gòu),可以先自己試著寫一個(gè),與他的對比,理解的快。
2 如果不懂算法,那還有兩個(gè)辦法:
   A debug,跟進(jìn)去看每一步變量的數(shù)值,看了幾個(gè)應(yīng)該就能明白。
   B 假設(shè)幾個(gè)數(shù)字,用筆算一下。原理和debug一樣。

以這個(gè)代碼為例,先看懂swap 的功能。
然后,對于,swap(v, left, (left + right)/2);
你假設(shè)v只有三個(gè)數(shù)1,3,2
然后 left = 0, right=2,這樣心算也能算出來。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2014-11-12 17:56 |只看該作者

很簡單,你用vs進(jìn)行單步調(diào)試,畫出流程圖,基本上就可以很好的 理解了

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2014-11-18 10:32 |只看該作者
自己帶了幾個(gè)數(shù)值進(jìn)去了,觀察到for語句的作用是,將大于v[left]的元素右移,直到他們都在v[last]右邊。

swap(v,left,last);  將v[left]和v[last]互換,從而實(shí)現(xiàn)一次劃分。

現(xiàn)在有個(gè)問題不明白:

在for循環(huán)之前,交換最左v[left]和中間元素v[(left + right)/2]的值有什么作用呢? ( swap(v, left, (left + right)/2);)

好疑惑啊,請哪位大俠幫忙解答下,謝謝。

  1. void qsort(int v[], int left, int right)
  2. {
  3.         int i, last;
  4.         void swap(int v[], int i,int j);
  5.         if(left >= right)                                                /*數(shù)目小于2,快速排序結(jié)束*/
  6.                 return ;
  7.         swap(v, left, (left + right)/2);                /*將最左和中間元素互換  ----這樣做是為什么呢?有什么道理?*/
  8.         last = left;                                                        /*將最左元素的值賦給變量last*/
  9.         for(i = left +1; i <=right; i++)                /*將大于V[left]的數(shù)右移*/
  10.         {
  11.                 if(v[i] <v[left])
  12.                         swap(v, ++last, i);
  13.         }
  14.         swap(v,left,last);                                                /*將v[left]移動到這些(大于v[left])數(shù)的左邊*/
  15.         qsort(v, left, last-1);
  16.         qsort(v, last+1, right);
  17. }

  18. void swap(int v[], int i, int j)                                /*交換v[i]和v[j]的值*/
  19. {
  20.         int temp;
  21.         temp = v[i];
  22.         v[i] = v[j];
  23.         v[j] = temp;

  24. }

復(fù)制代碼

論壇徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亞洲杯之阿曼
日期:2015-04-14 10:41:50NBA常規(guī)賽紀(jì)念章
日期:2015-05-04 22:32:03NBA季后賽大富翁
日期:2015-05-04 22:34:11菠菜明燈
日期:2015-05-04 22:35:49新奧爾良黃蜂
日期:2015-05-04 22:49:2315-16賽季CBA聯(lián)賽之廣夏
日期:2015-12-11 15:02:342015年亞洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亞洲杯之阿聯(lián)酋
日期:2015-03-04 11:19:04休斯頓火箭
日期:2015-03-02 16:32:11紐約尼克斯
日期:2015-03-02 16:09:04
6 [報(bào)告]
發(fā)表于 2014-11-18 10:52 |只看該作者
多看 多寫 多練

論壇徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辭舊歲徽章
日期:2015-03-03 16:54:152015年亞洲杯之約旦
日期:2015-02-11 14:38:37雙魚座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29雙子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亞洲杯之科威特
日期:2015-04-17 16:51:51
7 [報(bào)告]
發(fā)表于 2014-11-18 11:21 |只看該作者
需要補(bǔ)充點(diǎn)基礎(chǔ)知識,樓主可以搜一下快速排序,找文章看看基本原理。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2014-11-21 11:25 |只看該作者
書里面寫了啊。
Our version of quicksort is not the fastest possible, but it's one of the simplest. We use the middle element of each subarray for partitioning.

你可以嘗試用不同位置的element去做partition,比如就用the left element,這個(gè)swap就不需要了。

論壇徽章:
5
戌狗
日期:2014-06-09 10:29:10酉雞
日期:2014-12-01 16:05:27處女座
日期:2015-01-07 18:35:262015亞冠之水原三星
日期:2015-06-03 09:26:222015亞冠之布里斯班獅吼
日期:2015-06-15 10:53:54
9 [報(bào)告]
發(fā)表于 2014-11-21 18:36 |只看該作者
對于看不懂的代碼,個(gè)人覺得可以縮小規(guī)模一步步來,再結(jié)合設(shè)計(jì)原理重讀代碼。
那個(gè)left你可以理解成一個(gè)flag,這個(gè)flag的選取會影響算法最壞情況的效率。
因此可以取中,或者random
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP