排序算法——插入排序

原理

數據分為 有序 | 無序兩個部分。以升序為例,遍歷數組,為當前值尋找在有序部分的合適位置插入并結束子循環(huán),尋找的過程中將有序部分的值右移。

復雜度分析

平均時間復雜度為O(n^2)
時間復雜度最壞為O(n^2)
空間復雜度為 O(1)
穩(wěn)定

代碼實現

 public void sort(List<V> srcList, Comparator<V> comparator) {
        if (srcList == null || srcList.size() <= 2) {
            return;
        }
        for (int index = 0; index < srcList.size(); index++) {
            V element = srcList.get(index);
            V e2;
            int destIndex = index;
            //從有序部分最末向前遍歷,如果元素大于當前值element,將其后移一位,反之已找到合適位置,結束循環(huán),插入element
            for (int j = index - 1; j >= 0 && comparator.compare(e2 = srcList.get(j), element) > 0; j--) {
                srcList.set(j + 1, e2);//后移一位
                destIndex = j;
            }
            if (destIndex != index) {
                srcList.set(destIndex, element);
            }
        }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 冒泡排序插入排序插入排序和冒泡排序分析 冒泡排序 冒泡排序(英語:Bubble Sort,臺灣另外一種譯名為:泡沫...
    六尺帳篷閱讀 2,351評論 0 9
  • 插入排序基本思想是通過構建有序序列,對于未排序的數據,在已排序的數據中從后往前進行掃描,找到相應的位置插入。 時間...
    葉孤陳閱讀 181評論 0 1
  • 插入排序(Insert Sort)直接插入排序的基本操作是將一個記錄插入到已經排好的有序表中,從而得到一個新的、記...
    GB_speak閱讀 278評論 0 0
  • 插入排序:非常好理解,插入排序,就像我們平時在打撲克過程中整理手中排的過程一樣,從一側到另一側,選擇一張牌,找到最...
    關瑋琳linSir閱讀 338評論 0 25
  • 這是水果的最后一幅了,自我感覺是水果中最好的。
    白色冰菊閱讀 173評論 4 6

友情鏈接更多精彩內容