因為還在學習的階段,其實我對於八個排序演算法中的堆排序和歸併排序還是挺懵的…
氣泡排序是乙個簡單的排序演算法,核心思想是兩兩比較,每次迴圈將最大(最小)的數移動到陣列末端,然後進行第二次迴圈…直到陣列有序。演算法的時間複雜度為〇(n²),效率較低。
**:
氣泡排序的效率很低,所以我們對他進行改進,試想一下,如果乙個陣列是這樣的 [1,0,2,3,4,5],(這個陣列確實太極端了,但是我們只是想有乙個可以對演算法改進的例子而已)public
static
void
bubblesort
(int
arr)}}
}
對它進行排序,其實在第一次交換後就已經有序了,但還是需要迴圈n²次,所以我們對它改進:
定義乙個標誌,如果需要交換就將標誌賦值為false,每次外層迴圈開始時把標誌置為true,內層迴圈遍歷完陣列後判斷是否發生交換,若沒有,falg的值應為true,說明陣列已經有序,退出迴圈。public
static
void
bubblesort
(int
arr)}if
(flag)
}}
選擇排序的宗旨是每次迴圈選擇最大或最小的數,放在陣列的第一位,然後進入下一次迴圈…直至陣列有序,選擇排序的每次排序僅僅只交換需要交換的數,而不是兩兩交換,時間複雜度為〇(n²)。
**:
還有個聊勝於無的優化,當需要交換的索引為自身的時候,不需要交換:public
static
void
selectsort
(int
arr)
} arr[ index ]
= arr[ i ]
; arr[ i ]
= min;
}}
插入排序的主要思想是把乙個陣列分為兩個部分,前乙個部分是有序的陣列,後乙個部分是無序的陣列,每次把無序陣列的第乙個數插入到有序陣列中,第一次陣列第乙個元素為乙個有序的序列,時間複雜度為〇(n²)。public
static
void
selectsort
(int
arr)}if
(index != i)
}}
**:
希爾排序是選擇排序的乙個高階版本,對選擇排序進行了改進,使得效率更高,平均時間複雜度為〇(n ㏒n),最壞時間複雜度接近於〇(n²)。public
static
void
insertionsort
(int
arr)
arr[ index ]
= indexval;
}}
希爾排序又稱為縮小增量排序,增量可以理解為把乙個陣列分為若干個小組,一般初始增量為陣列長度的一半,然後每個小組進行選擇排序,每次迴圈將增量折半,直到增量縮減為1,完成排序。其實比起增量我更喜歡叫步長,因為同一組元素的距離就是步長。
快排利用遞迴,每次遞迴將陣列(不是完整的陣列,因為方法需要兩個引數,乙個左邊界,乙個右邊界)看做兩半,取中心軸,然後把陣列中比中軸小的數放在陣列的左邊,大的放在陣列的右邊,最後把中軸插在中心,再次對中軸的左子陣列和右子陣列進行相同的操作,最後陣列有序。public
static
void
shellsort
(int
arr)
arr[ index ]
= indexval;}}
}}
我覺得快速排序要比歸併排序更容易理解,而且jdk原始碼中arrays工具類的sort方法使用的也是快速排序,平均時間複雜度為〇(n ㏒n),最壞時間複雜度為〇(n²)。
public
static
void
quicksort
(int
arr,
int left,
int right)
int l = left;
int r = right;
//這個中軸取陣列中的哪個數都是一樣的,只是邏輯要修改一點
int pivot = arr[ l ]
;while
(l < r)
if(l < r)
while
(l < r && arr[ l ]
<= pivot)
if(l < r)
if(l >= r)
}quicksort
(arr, left, l -1)
;quicksort
(arr, l +
1, right);}
/** * 過載方法
* @param arr 要排序的陣列
*/public
static
void
quicksort
(int
arr)
八大排序演算法
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 歸併排序 計數排序 基數排序 桶排序...