亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 教學--第18章 數組(三) ---- 最值與排序.htm

?? 電子書籍(白話c++)非常好用的一本書
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
      if(num[j+1] &lt; num[j])</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>對調兩個數,需要有<SPAN lang=en-us>"</SPAN>第三者<SPAN lang=en-us>"</SPAN>參以
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      tmp = num[j+1];</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      num[j+1] = num[j];</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      num[j] = tmp;</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
      </SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P>注意在內層循環中j的結束值是<SPAN lang=en-us> count - i - 1</SPAN>。 
      要理解這段代碼,明白為什么結束在<SPAN lang=en-us>count - i 
      -1</SPAN>?如果你忘了如何在CB進行代碼調試,如果設置斷點,如何單步運行,如何觀察變量的值,那么你需要“嚴重”復習前面有關“調試”的章節;如果你一直是高度著每一章的程序到現在,那么你可以繼續下面的內容。
      <P> 
      <P>排序函數寫出一個了,如何調試這個函數?在CB里新建一空白控制臺程序,然后在主函數里,讓我們寫一些代碼來調用這個函數,并且觀察排序結果。
      <P> 
      <P><SPAN lang=en-us>#include &lt;iostream.h&gt;</SPAN>
      <P>……
      <P><SPAN lang=en-us>void bubble(int num[],int count)</SPAN>
      <P><SPAN lang=en-us>{</SPAN>
      <P><SPAN lang=en-us>&nbsp; </SPAN>……
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P><SPAN lang=en-us>int main() //</SPAN>我實在有些懶得寫<SPAN 
      lang=en-us>main</SPAN>里兩個參數,反正它們暫時對我們都沒有用,
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>反正CB會為你自動生成,所以從此刻起,我不寫了<SPAN lang=en-us>,</SPAN>除非有必要。
      <P><SPAN lang=en-us>{</SPAN>
      <P>&nbsp;&nbsp; <SPAN lang=en-us>&nbsp;int values[] = {2,5,1,4,3};</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; int count = sizeof(values[]) / 
      sizeof(values[0]);</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; bubble(value,sizeof);</SPAN>
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P>你要做的工作是單步跟蹤上面的代碼,看看整個流程是不是像我前面不厭其煩的寫的“第一遍第二遍第三遍”所描述的。
      <P> 
      <P>完成上面的工作了嗎?全部過程下來,只花20分鐘應該算是速度快或者不認真的了(天知道你是哪一種?天知道你到底是不是沒有完成就來騙我?)。現在讓這個程序有點輸出。我們加一個小小的函數:
      <P> 
      <P><SPAN lang=en-us>//</SPAN>輸出數組的元素值
      <P><SPAN lang=en-us>//num :</SPAN>待輸出的數組
      <P><SPAN lang=en-us>//count:</SPAN>元素個數
      <P><SPAN lang=en-us>void printArray(int num[],int count)</SPAN>
      <P><SPAN lang=en-us>{</SPAN>
      <P><SPAN lang=en-us>&nbsp; for(int i = 0; i &lt; count; i++)</SPAN>
      <P><SPAN lang=en-us>&nbsp; {</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp; count &lt;&lt; num[i] 
      &lt;&lt; ",";</SPAN>
      <P><SPAN lang=en-us>&nbsp; }</SPAN>
      <P> 
      <P><SPAN lang=en-us>&nbsp; cout &lt;&lt; endl;</SPAN>
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P>把這個函數加到<SPAN lang=en-us>main()</SPAN>函數頭之前,然后我們用它來輸出:
      <P><SPAN lang=en-us>int main() //</SPAN>我實在有些懶得寫<SPAN 
      lang=en-us>main</SPAN>里兩個參數,反正它們暫時對我們都沒有用,
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>反正CB會為你自動生成,所以從此刻起,我不寫了<SPAN lang=en-us>,</SPAN>除非有必要。
      <P><SPAN lang=en-us>{</SPAN>
      <P>&nbsp;&nbsp; <SPAN lang=en-us>&nbsp;int values[] = {2,5,1,4,3};</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; int count = sizeof(values[]) / 
      sizeof(values[0]);</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; </SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "</SPAN>排序之前:<SPAN 
      lang=en-us>" &lt;&lt; endl;</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; printArray(values,count);</SPAN>
      <P> 
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; //</SPAN>冒泡排序:
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; bubble(value,sizeof);</SPAN>
      <P> 
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "</SPAN>排序之后<SPAN 
      lang=en-us>:"&nbsp; &lt;&lt; endl;</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; printArray(values,count);</SPAN>
      <P> 
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; system("PAUSE");</SPAN>
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P>后面要講的其它排序法也將用這個<SPAN lang=en-us>printArray()</SPAN>來作輸出。
      <P> 
      <P>冒泡排序是效率最差勁的方法(速度慢),不過若論起不另外占用內存,則它當屬第一。在交換元素中使用了一個臨時變量(第三者),還有兩個循環因子i和j,這些都屬于必須品,其它的它一個變量也沒多占。
      <P> 
      <P>我們現在講講如何避免數據其實已經排好,程序仍然空轉的的局面。
      <P>首先要肯定一點,至少一遍的空轉是不可避免的,這包括讓人來排,因為你要發現結果已是1,2,3,4,5了,你也是用眼睛從頭到尾抄了一遍(如果你視力不好,說不定還要掃兩遍呢)。
      <P>接下來一點,我們來看看除了第一遍空轉,后面的是否可以避免。冒泡排序法的空轉意味著什么?因為算法是拿相鄰的兩個比較,一發現次序不合“從小到大”的目的(小的在大的后頭),就進行對調。所以如果這個對調一次也沒有進行,那就說明后面的元素必然是已經完全有序了,可以放心地結束。
      <P> 
      <P>讓我們來加個變量,用于標志剛剛完成的這一遍是否空轉,如果是空轉,就讓代碼跳出循環。
      <P> 
      <P><SPAN lang=en-us>//</SPAN>冒泡排序<SPAN 
      lang=en-us>(</SPAN>從小到大,且加了空轉判斷<SPAN lang=en-us>)</SPAN>:
      <P><SPAN lang=en-us>void bubble(int num[],int count)</SPAN>
      <P><SPAN lang=en-us>{</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; int tmp;</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; bool swapped;&nbsp; //</SPAN>有交換嗎?
      <P> 
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; //</SPAN>要排<SPAN 
      lang=en-us>Count</SPAN>個數,則應排<SPAN lang=en-us>Count</SPAN>遍:
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; count; 
      i++)</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; {</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>第一遍開始之前,我們都假充本遍可能沒有交換(空轉):
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swapped = 
      false;</SPAN>
      <P> 
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j = 0; j 
      &lt; <B>count - i - 1</B>; j++)</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>比較相鄰的兩個數:
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      if(num[j+1] &lt; num[j])&nbsp; //</SPAN>后面的數小于前面的數
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      {</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      swapped = true;&nbsp; //</SPAN>還是有交換
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //</SPAN>對調兩個數,需要有<SPAN lang=en-us>"</SPAN>第三者<SPAN lang=en-us>"</SPAN>參以
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      tmp = num[j+1];</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      num[j+1] = num[j];</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      num[j] = tmp;</SPAN>
      <P><SPAN 
      lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
      </SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
      (!swapped)</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      break;</SPAN>
      <P><SPAN lang=en-us>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>
      <P><SPAN lang=en-us>}</SPAN>
      <P> 
      <P>加了<SPAN 
      lang=en-us>swapped</SPAN>標志,這個算法也快不了多少,甚至會慢也有可能。冒泡排序還有一些其它的改進的可能,但同樣作用不大,并且會讓其喪失僅有優點“代碼簡單直觀”。所以我個人認為真有需要使用冒泡排序時,僅用最原汁原味的“泡”就好。必竟,你選擇了冒泡算法,就說明你對本次排序的速度并無多高的要求。
      <P> 
      <P>對于n個元素,原汁原味的“冒泡排序”算法要做的比較次數是固定的: (n<SPAN lang=en-us>&nbsp; - 
      1</SPAN>)<SPAN lang=en-us>* n/2 </SPAN>次的比較。
      <P>交換次數呢?如果一開始就是排好序的數據,則交換次數為0。
      <P>一般情況下為<SPAN lang=en-us> 3 * (n - 1) * n / 4;</SPAN>最慘時(逆序)為<SPAN 
      lang=en-us>3 *&nbsp; (n - 1) * n / 2</SPAN>。
      <P> 
      <P>冒完泡以后——情不自禁看一眼窗臺罐頭瓶里那只胖金魚——讓我們開始中國人最直觀的選擇排序法吧。對了,補一句,如果你看到有人在說“上推排序”,那么你要知道,“上推排序”是“冒泡排序”的另一種叫法,惟一的區別是:它不會讓我們聯想到金魚。
      <P> 
      <H4><B><A name=18.2.3>18.2.3</A> 選擇排序</B></H4>
      <P> 
      <P>本章前頭我們講了“求最值”的算法,包括最大值和最小值。其實,有了求最值的算法,排序不也完成了一半?想像一下桌子上攤開著牌,第一次我們從中換挑出大王放在手上,第二次我們挑出小王,然后是黑桃老K……黑桃Q,如此下去直到小A,手中的牌不也就已經排好次序了?
      <P> 
      <P>每次從中選出最大值或最小值,依此排成序,這就是選擇排序法的過程描述。
      <P> 
      <P>不過,上述的過程有一點不合要求。我們說過手中只能過一張牌。因此,在程序實現時,我們找出一個最大值之后,就要把它放到數組中最末。那數組中最末位置原來的值?當然是把它放到最大值原來所在位置了。
      <P>為了再稍稍直觀點,我們改為:每次找的是最小值,找出后改為放到數組前頭。
      <P> 
      <P>//選擇排序(從小到大)
      <P><SPAN lang=en-us>void select(int num[], int count)</SPAN>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆一区二区三区| 欧美精品成人一区二区三区四区| 欧美日本一区二区在线观看| 国产精品三级av在线播放| 国产另类ts人妖一区二区| 久久综合九色综合欧美98| 六月婷婷色综合| 91麻豆精品91久久久久久清纯| 亚洲永久精品大片| 欧美日韩你懂得| 美女视频黄a大片欧美| 日韩一区二区视频在线观看| 久久精品噜噜噜成人av农村| 日韩一区二区影院| 成人精品国产一区二区4080| 一区二区三区在线播| 欧美日本不卡视频| 亚洲第一精品在线| 在线观看91av| 日本视频一区二区三区| 日韩三级av在线播放| 91色porny| 国产一区二区日韩精品| 亚洲日本乱码在线观看| 欧美色图天堂网| 国产不卡高清在线观看视频| **性色生活片久久毛片| 91视频.com| 美女性感视频久久| 亚洲自拍与偷拍| 1024成人网色www| 久久亚洲一区二区三区四区| 欧美日精品一区视频| 91蜜桃在线观看| 成人精品在线视频观看| 国产一区二区三区香蕉| 老司机精品视频在线| 久久精品国产精品青草| 亚洲精品精品亚洲| 久久新电视剧免费观看| 欧美一卡2卡3卡4卡| 欧美性大战久久久久久久| www.日韩在线| 成人激情小说乱人伦| 国产精品一区在线观看乱码 | 精品国产一区久久| 欧美精品一区二区三区蜜桃视频 | 成年人国产精品| 97久久精品人人做人人爽| 99久久99久久久精品齐齐| 国产宾馆实践打屁股91| 成人av在线资源| 色哟哟一区二区三区| 在线视频你懂得一区二区三区| 欧美天天综合网| 日韩一区二区三区四区| 精品国产乱码久久久久久蜜臀| 日韩精品中文字幕一区二区三区 | 日本亚洲欧美天堂免费| 久久不见久久见免费视频7| 国产精品白丝jk黑袜喷水| 波多野结衣的一区二区三区| 在线亚洲+欧美+日本专区| 欧美日韩视频在线观看一区二区三区| 欧美日韩高清在线播放| 亚洲国产成人午夜在线一区| 亚洲一卡二卡三卡四卡五卡| 极品尤物av久久免费看| 99re这里只有精品首页| 精品理论电影在线观看| 国产精品色婷婷| 另类人妖一区二区av| 91久久线看在观草草青青 | 日本精品免费观看高清观看| 日韩无一区二区| 亚洲福利电影网| 不卡的看片网站| 久久理论电影网| 日本三级韩国三级欧美三级| 91视视频在线直接观看在线看网页在线看| 欧美日韩免费一区二区三区| 国产精品久久久久精k8 | 一区二区三区美女| a在线播放不卡| 亚洲国产高清aⅴ视频| 国内精品久久久久影院色| 欧美一级生活片| 日韩激情中文字幕| 91精品国产一区二区三区| 亚洲国产成人精品视频| 日本韩国精品在线| 一区二区三区在线免费视频| 99热99精品| 亚洲欧美另类综合偷拍| bt欧美亚洲午夜电影天堂| 中文在线资源观看网站视频免费不卡 | 在线观看成人免费视频| 亚洲欧美色图小说| 欧美疯狂做受xxxx富婆| 亚洲裸体在线观看| 欧美三级乱人伦电影| 一区二区三区精品| 精品亚洲aⅴ乱码一区二区三区| 成人a区在线观看| 亚洲午夜国产一区99re久久| 久久久久久久电影| 7777精品伊人久久久大香线蕉经典版下载| 久久99精品国产91久久来源| 亚洲欧美日韩久久精品| 91香蕉视频mp4| 天堂久久久久va久久久久| 久久综合久久久久88| 99国产精品国产精品久久| 亚洲一区精品在线| 精品日韩欧美一区二区| 丁香婷婷综合五月| 亚洲午夜免费电影| 久久精品一区二区| 91精品91久久久中77777| 日本视频在线一区| 国产精品久99| 日韩美女在线视频| 91老师片黄在线观看| 久久精品国产亚洲a| 亚洲乱码国产乱码精品精98午夜| 日韩欧美精品在线视频| 一本大道av伊人久久综合| 国产超碰在线一区| 精品一区二区久久| 日日骚欧美日韩| 亚洲高清免费在线| 亚洲三级免费观看| 中文字幕在线一区| 久久色成人在线| 精品毛片乱码1区2区3区| 欧美日韩夫妻久久| 在线观看日韩av先锋影音电影院| 成人激情动漫在线观看| 国产精品亚洲成人| 国产精品1区二区.| 成人午夜精品一区二区三区| 国内精品国产三级国产a久久| 精品一区二区三区免费视频| 喷水一区二区三区| 久久国产尿小便嘘嘘尿| 国产成人亚洲综合色影视| 成人一二三区视频| 99re这里只有精品首页| 色88888久久久久久影院野外 | 国产又粗又猛又爽又黄91精品| 蜜臀av在线播放一区二区三区| 日韩国产在线观看| 激情成人午夜视频| 风间由美一区二区三区在线观看| 成人性生交大片免费看中文网站| 99精品国产91久久久久久 | 亚洲欧美日韩久久| 久久成人免费网站| 欧美老肥妇做.爰bbww| 一区二区三区四区高清精品免费观看| 精品在线你懂的| 美腿丝袜亚洲色图| 亚洲第一福利视频在线| 捆绑紧缚一区二区三区视频| 欧美日韩在线三级| 一区二区三区 在线观看视频| 午夜国产不卡在线观看视频| 捆绑调教一区二区三区| 免费精品99久久国产综合精品| 蜜桃视频免费观看一区| 国产毛片精品一区| 日韩欧美一级精品久久| 午夜久久福利影院| 欧美高清视频www夜色资源网| 亚洲欧美一区二区三区孕妇| 91在线精品一区二区三区| 欧美国产日韩在线观看| 国产成人av电影| 国产精品成人免费在线| 一本大道久久精品懂色aⅴ| 亚洲欧美怡红院| 欧美亚洲一区三区| 亚洲成人av电影在线| 国产在线国偷精品免费看| 91激情五月电影| www久久久久| 亚洲欧美色一区| 精品一二线国产| 欧美日韩午夜影院| 欧美高清在线精品一区| 亚洲免费在线播放| 久久66热偷产精品| 白白色 亚洲乱淫| 欧美视频在线一区| 午夜精品aaa| av欧美精品.com| 中文字幕一区二区三区四区不卡| 韩国视频一区二区| 26uuu另类欧美| 懂色中文一区二区在线播放|