許久沒有寫點東西了,答辯以後人也變得鬆懈。今天看到簡書又有人點贊以前記錄的冒泡排序,點進去一看,竟然有4w+的閱讀量,心生疑問,咋會有這麼高的閱讀量,打開百度搜索冒泡排序,結果第3條就是個人。點開認真看了看,其實寫得很差,還改了兩個錯別字(狗頭),這個閱讀量或許只是記錄的點擊量。但我萌生一個想法,趁如今有時間,想把排序系列作完,便於之後本身回顧。java
排序—冒泡排序
排序—選擇排序
排序—快速排序
排序—插入排序
排序-希爾排序(待完善)
排序—歸併排序(待完善)
排序—基數排序(待完善)
排序—堆排序(待完善)
排序—桶排序(待完善)
排序—計數排序(待完善)
排序—排序算法總結(待完善)算法
基本思想是在一個有序的序列
中找到待排序元素的位置,好比將3
插入-1,2,4,6
這個有序序列中,先與6和4比較,直到和2比較以後,找到適合插入的位置(2以後)。
下面以按升序排序爲例:code
動圖展現(圖片來源見參考資料)
blog
/** * 插入排序 * @param arr */ public static void insertSort(int[] arr) { if(arr == null || arr.length == 0) return; int curEle, preIndex; // 記錄當前待排序元素和前一個元素的下標 for(int i = 0; i < arr.length; i++) { preIndex = i - 1; curEle = arr[i]; while(preIndex >=0 && arr[preIndex] > curEle){ arr[preIndex + 1] = arr[preIndex]; // 移動元素 preIndex--; } // 將待排序元素插入新的位置 arr[preIndex + 1] = curEle; } }
時間複雜度:$O(n^2)$
空間複雜度:$O(1)$
穩定性:穩定排序
本文如有不當,請指出。
此致,敬禮!get