各種排序的時間、空間複雜度:
穩定性是指排序中
相同的數在排序前後,他們的
相對位置不會發生改變。
1.直接插入排序
經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。將第乙個數和第二個數排序,然後構成乙個有序序列
將第三個數插入進去,構成乙個新的有序序列。
對第四個數、第五個數……直到最後乙個數,重複第二步。
如何寫成**:
首先設定插入次數,即迴圈次數,for(int i=1;i
設定插入數和得到已經排好序列的最後乙個數的位數。insertnum和j=i-1。
從最後乙個數開始向前迴圈,如果插入數小於當前數,就將當前數向後移動一位。
將當前數放置到空著的位置,即j+1。
**實現如下:
public class test ;
for(int i=1;i=0;j--)
}c[position] = current;
} //列印排好序列
for(int q=0;q
對於直接插入排序問題,資料量巨大時。
將數的個數設為n,取奇數k=n/2,將下標差值為k的書分為一組,構成有序序列。
再取k=k/2 ,將下標差值為k的書分為一組,構成有序序列。
重複第二步,直到k=1執行簡單插入排序。
如何寫成**:
首先確定分的組數。
然後對組中元素進行插入排序。
然後將length/2,重複1,2步,直到length=0為止。
**實現如下:
public class test ;
shellsort(c);
//列印排好序列
for(int q=0;q0)
// j-=d;
// }
//此處有兩個判斷條件,當都滿足是才執行。不要寫成上面的錯誤方式。
for(;j>=0&¤t < a[j];j-=d)
a[j+d] = current;}}
} }
}
常用於取序列中最大最小的幾個數時。(如果每次比較都交換,那麼就是交換排序;如果每次比較完乙個迴圈再交換,就是簡單選擇排序。)
遍歷整個序列,將最小的數放在最前面。
遍歷剩下的序列,將最小的數放在最前面。
重複第二步,直到只剩下乙個數。
如何寫成**:
首先確定迴圈次數,並且記住當前數字和當前位置。
將當前位置後面所有的數與當前數字進行對比,小數賦值給key,並記住小數的位置。
比對完成後,將最小的值與第乙個數的值交換。
重複2、3步。
**實現如下:
public class test ;
int i,j,k;
//選擇排序
for(i=0;ic[j])}}
for(int q=0;q
一般不用。
將序列中所有元素兩兩比較,將最大的放在最後面。
將剩餘序列中所有元素兩兩比較,將最大的放在最後面。
重複第二步,直到只剩下乙個數。
如何寫成**:
設定迴圈次數。
設定開始比較的位數,和結束的位數。
兩兩比較,將最小的放到前面去。
重複2、3步,直到迴圈次數完畢。
**實現如下:
public class test ;
int i,j;
//氣泡排序
for(i=0;ic[j+1])
}}
for(int q=0;q
要求時間最快時。
選擇第乙個數為p,小於p的數放在左邊,大於p的數放在右邊。
遞迴的將p左邊和右邊的數都按照第一步進行,直到不能遞迴。
**實現如下:
public class test ;
quicksort(c, 0, c.length-1);
//列印排好序列
for(int q=0;qstart && a[j] > base)j--;
if(i<=j)
}while(i<=j);
if(i< end)
quicksort(a,i,end);
if(j > start)
quicksort(a,start,j);
}} }
速度僅次於快排,記憶體少的時候使用,可以進行平行計算的時候使用。選擇相鄰兩個數組成乙個有序序列。
選擇相鄰的兩個有序序列組成乙個有序序列。
重複第二步,直到全部組成乙個有序序列。
**實現如下:
public class test ;
//呼叫歸併排序操作。
mergesort2(c, 0, c.length-1);
//列印排好序列
for(int q=0;q
java實現6種排序演算法
典型的二分查詢 對於二分查詢演算法要求,查詢前的資料必須是已經排好序的,然後得到陣列的開始位置start和結束位置end,取中間位置mid的資料a mid 跟待查詢資料key進行比較,若 a mid key,則取end mid 1 若 a mid key,則取start mid 1 若 a mid ...
Java常用八種排序演算法
1.直接插入排序 穩定 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。public class insertsort public static void in...
6種內部排序演算法 Java實現
一 直接插入排序 待排序陣列 a 0.n 1 排序思路 首先我們認為a 0 是已經排好序的,在排序過程中,依次將a i i 1,2,n 1 從後往前插入到前面已經 排 好序的子陣列a 0.i 1 中的適當位置中,待所有的a i 插入完畢,即排序完畢。演算法如下 空間上,該演算法僅需要常數個輔助單元,...