回覆列表
  • 1 # 使用者3456175603979

    for(i=1;i

    {

    t=a[i];

    for( j=i-1 ; j>=0 && t>a[j] ; j-- ) //內層

    a[j+1]=a[j];

    a[j+1]=t;

    }

    你要理解插入排序的原理,外層for從第二個數開始遍歷(i從1開始),用t(即對應的a[i])和其前面的所有值進行比較,如果t大,則該數後移一位,直到t小或者j小於0的時候退出內層for迴圈,這時候出現的格局就是所有在i位置之前比a[i]小的值全部後移了一位,退出迴圈時就會空出一個位置來。舉個例子:輸入:1 3 2 4

    第一次迴圈時,t=a[1]=3,t>a[0],所以a[0]後移一位(即:a[j+1]=a[j] -> a[1]=a[0]),之後出現結果:1124,這時候實際上0位置是給此時的t預留的位置,內層for執行完畢後,執行:a[j+1]=t 正好彌補這個空缺。結果:3124

    第二次迴圈時,j=1,t=a[2]=2,t>a[1],所以a[1]後移一位:a[2]=a[1],之後結果:3114,在比較t和a[0],t小,跳出內層for,跳出時j為0,執行:a[1]=t=2,結果:3214

    下面就不講了,從上面可以看出,你說的那一句,至關重要,外層for每迴圈一次就插入一位資料,而a[j+1]=t,就是完成插入的最後一步。。

  • 中秋節和大豐收的關聯?
  • 電陶爐插入電源風扇能轉,就不發熱怎麼回事?