圖解Java經典算法插入排序的原理與實現
一、算法介紹
插入排序,也稱為直接插入排序。插入排序是簡單排序中效率最好的一種,它也是學習其他高級排序的基礎,比如希爾排序/快速排序,所以非常重要,而它相對于選擇排序的優(yōu)點就在于比較次數幾乎是少了一半。
二、算法思想
每次將待排序的元素插入到已排序的序列中,直至全部插入完成。
三、算法原理
- 把所有元素分為兩個序列,將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。
- 從未排序序列中的第一個元素開始,向已排序的序列中插入
- 倒序遍歷已排序序列,依次和待插入的元素比較,找到一個小于或等于待插入的元素,插入到該元素后面,其余元素向后移動一位
四、動圖演示
五、代碼實現
核心代碼
public class InsertionSort { // 插入排序 public static void sort(Comparable[] a){ for (int i = 1;i < a.length;i++){ for (int j = i;j > 0;j--){ //比較索引j處的值與索引j-1處的值,如果j-1索引處的值大,則交換數據,反之,則找到了合適的位置,退出循環(huán) if (greater(a[j - 1],a[j])){ swap(a,j - 1,j); }else{ break; } } } } //比較 v 是否大于 w public static boolean greater(Comparable v,Comparable w){ return v.compareTo(w) > 0; } //數組元素交換位置 private static void swap(Comparable[] a,int i,int j){ Comparable temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } }
方法調用
public class InsertionSortTest { public static void main(String[] args) { Integer[] arr = {3,44,38,5,47,15,36,26,27}; InsertionSort.sort(arr); System.out.println(Arrays.toString(arr)); } } //排序前:{3,44,38,5,47,15,36,26,27} //排序后:{3,5,15,26,27,36,38,44,47}
六、算法分析
6.1 時間復雜度
當待排序的 n 個元素是正序排列時,是排序的最佳情況,只需要比較(n-1)次,時間復雜度是O(n);最壞的情況是該序列是反序排列,此時就需要比較n(n-1)/2次,時間復雜度為 O(n²)。
插入排序的平均時間復雜度為 O(n²)
6.2 空間復雜度
插入排序的空間復雜度為常數階O(1)
到此這篇關于圖解Java經典算法插入排序的原理與實現的文章就介紹到這了,更多相關Java插入排序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
String實例化及static final修飾符實現方法解析
這篇文章主要介紹了String實例化及static final修飾符實現方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09