回覆列表
  • 1 # 寒來一暑往

    我都不知道說什麼好!i是外迴圈計數變數,由它來安排後面的j迴圈從哪裡開始,所以第i以前的都已經排好序了,這說明i只能一次增1來遍歷陣列。正因為如此,所以才安排一個臨時變數k來記錄第i以後的所有元素值中最小(或最大)值的下標,以不影響i按部就班地遍歷整個陣列(最後一個元素可以不包括,因為j是從i+1開始的;當然包括了也不錯,只是多作一次迴圈判斷罷了)。你倒好,還在迴圈體中對i進行干預!你以為k=i了兩者就一樣了?k=i只是在每一輪迴圈開始時讓k的初值等於i(選擇法演算法要素之一),而兩者的功能完全不同:i在當前一輪迴圈中不能改變,是要準備把i以後的元素中最小值拿來與i下標的元素比較看是否應該交換;而k是隨i以後的元素值的大小而遊走的,總是記錄著i以後的元素中當前最小值(或最大值)的下標。你把i當k用,隨時更改它的值,那外迴圈還能正常進行嗎?排序演算法過程全是在外迴圈正確程序下才有保證,外迴圈被人為擾亂了,其中的演算法還能正常?況且,外迴圈中還有i++!比如:當前i==5,那麼正常時下一輪應該是i==6;可你內迴圈把i當臨時變數k使,倘若array[9]是最小的,那麼i立馬被賦值為9了,……程序退到外迴圈由於i++的作用i就是10了,那麼i<n-1顯然不成立了,外迴圈就此結束,6、7、8、9這幾個下標的元素就失去了參與排序的機會!看程式碼首先要理解程式碼思想,再研究怎麼用C的合法語句體現這種思想,所以必須把一個功能模組整體觀察……

  • 中秋節和大豐收的關聯?
  • 如果足球比賽取消越位,會發生什麼情況呢?