插入排序:是利用第1次排序到第p次排序,位置0到p-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.34,51,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; } } }