八大排序演算法

2021-08-30 09:00:16 字數 1768 閱讀 7050

直接插入排序(straight insertion sort)

原理:將需要排序的數字分為有序區間和無序區間;交界處的無序區間第乙個數稱為哨兵,每一次取乙個哨兵,從右往左逐個與有序區間的數字進行比較;在確定插入位置前,每次比較都將比較的那個數字向後移動一位,直到找到哨兵的正確位置;第乙個數字預設認為它是有序的;如果碰到乙個數字剛好跟哨兵相等,那麼哨兵在前或者後不影響排序;所以直接插入排序是穩定的排序演算法

public

void

insertsort()

;//遍歷陣列

for(

int m =

0; m < arr.length;m++

)//比較完畢,當前m索引就是哨兵的排序位置

arr[n]

= tmp;

}}

希爾排序(shell』s sort)
原理:希爾排序是直接插入排序的加強,先將整個待排序的序列按照步長step拆分成多組step,然後對每一組序列進行直接插入排序,步長取值為待排序序列元素的個數逐步取商數於2

eg:int[

] arr =

; 第一次分組:

int step = arr.length /2;

arr[0]

--arr[

5] arr[1]

--arr[6]

arr[2]

--arr[

7] arr[3]

--arr[8]

arr[4]

--arr[9]

如果後面的數大於前面的數,就將後面的數視為哨兵來進行直接插入排序

第二次分組:

int step = arr.length /2/

2;arr[0]

--arr[2]

--arr[4]

--arr[6]

--arr[

8]

arr[1]

--arr[3]

--arr[5]

--arr[7]

--arr[9]

比如說,如果arr[6]

,那麼arr[

6]將作為哨兵在arr[0]

/arr[2]

/arr[

4]這組資料中排序

public

void

shellinsertsort()

;for

(int step = arr.length; step >

0; step /=2)

arr[n+step]

=tmp;

//此時的n+step的值實際上就是結束for迴圈時候的n的值}}

}}由於條件表示式我們只能定義n>=

0來作為防止索引越界的判斷,因此不能再像直接插入排序那樣,使用

arrr[n-1]

=arr[n]

,由於步長不確定,使用arr[n-step]可能發發生索引越界

選擇排序—簡單選擇排序(****** selection sort)
原理:在要排序的一組數中,選出最小(或者最大)的乙個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-

1個元素(倒數第二個數)和第n個元素(最後乙個數)比較為止。

public

void

******selectsort()

;//arr[m]代表當前正在比萎招親的元素

for(

int m=

0;m}}

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...

八大排序演算法

一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...

八大排序演算法

排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...