JAVA基礎 6種常用排序演算法

2021-08-08 17:22:55 字數 2811 閱讀 9223

各種排序的時間、空間複雜度:

穩定性是指排序中

相同的數在排序前後,他們的

相對位置不會發生改變。

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 插入完畢,即排序完畢。演算法如下 空間上,該演算法僅需要常數個輔助單元,...