[Data Structure & Algorithm] 插入排序

排序

  • 內(部)排序 - 排序時不涉及數據的內、外交換,即整個文件都是放在內存中處理
  • 外(部)排序 - 排序時要進行數據的內、外交換

插入排序

直接插入排序 Straight Insertion Sort - 最簡單

  • 基本操做
    1.比較關鍵字
    2.移動記錄
  • 具體實現
    • 設置監視哨SqList[0] = i(待插入的值)
    • 從數組的末尾開始循環,把比i大的值都向後移一位,直到碰上比i小的值,插入i
  • 空間上 - 監視哨須要額外空間
  • 時間上 - O(n2)
    • 最好狀況 - 正序 - 插入第i個值,比較1次,無需移動
    • 最壞狀況 - 逆序 - 插入第i個值,比較i次,移動i-1次
    • 二者平均獲得該算法的時間複雜度
  • 適用於
    • 待排序列基本有序
    • n的值比較小

折半插入排序

  • 改進第一步 比較關鍵字
  • 時間複雜度 - O(n2)
    • 第二步 移動記錄的次數不變,因此時間複雜度不變

2路插入排序

  • 同時改進第一步(折半查找)和第二步
  • 基本思路 - 移動記錄改進
    1.把第一個記錄r[1]做爲分界線,將待排序的序列分爲兩部分
    2.比r[1]小的,插入到r[1]以前的序列中;比r[1]大的,插入到r[1]後面的序列中
  • 空間上 - 須要額外n個空間
  • 時間上 - O(n2)
    • 最好狀況 - r[1]在待排序列的中間,則能夠減小一半的移動次數
    • 最壞狀況 - r[1]是最大或最小值,沒有任何優化

希爾排序 Shell‘s sort - 縮小增量排序 Diminishing increment sort

  • 基本思路
    1.肯定增量序列,如{1,3,5}
    - h1= 1的遞增整數序列
    2.從增量序列中的最大值開始,依次對待排序列進行劃分
    3.對於劃分出的子序列用直接插入排序,直到最終的增量爲1,獲得完整的有序序列
  • 時間複雜度 - 由增量序列決定
相關文章
相關標籤/搜索