經典排序——插入排序

插入排序:是利用第1次排序到第p次排序,位置0p-1上的位置都是排序好的。數組

這樣只要比較一下[i-1][i]就知道還要不要進入第2個循環。spa

若是[i-1]>[i]那麼就要繼續進入第二個循環。排序

將這個位置的[i]存起來temp;在令j=i;開始循環交換位置,temp[j]=temp[j-1]ast

這個時候進行下一步判斷,temp[j-1]>temp,若是true繼續交換,若是false,讓test[j]=temp;便可test

數組34,8,64,51,32,21循環

先比較34,8看要不要進入第二個循環,34>8,進入數據

交換34,8的位置  8,34 由於j--的緣由j=0,退出循環,static

i++,比較34,64   34<64不用進入co

i++,比較64,51 64>51進入第二次循環。交換位置,8,34,64,64,雖然j-->0,可是temp[j-1]<temp同樣退出循環,進行test[j]=temp,8,34,51,64void

i++,比較64,32 64>32進入第二個循環,交換位置是這樣的8.3451,64,64

要明白這個8,34,51,64,64。是利用這個才實現將元素的插入的。找到一個元素,也想這個元素在前邊排序的中間,正是由於這個才能準確

的這個元素插入到準確的位置。

而且也不能將test[j-1]>test作成if的判斷條件,由於即便沒有產生交換也會形成j--從而不能排序不說,整個數組的數據都發生了變化。

代碼以下:

public static void fastSortT(int [] test){
   for(int i=1;i<test.length;i++){
    if(test[i-1]>test[i]){//由於每次排序都會將前邊的i-1個數排序,因此只要比較一個前邊排序的最後一個就能夠了,若是最大的也要小的話
     //那就不要排序了,直接就是這樣了,只有最後一個比他要大才會細分。
     int temp = test[i];//將test[i]這個數保存起來。
     int j;
     for(j=i;j>0&&test[j-1]>temp;j--){
      test[j]=test[j-1];
     }
                    test[j] = temp;    }   }  }

相關文章
相關標籤/搜索