1. 程式人生 > >Java 插入排序和快速原理

Java 插入排序和快速原理

插入排序

插入排序基本思想:每一趟將一個待排序的元素,按其關鍵字值的大小插入到已經排過序的有序區中的適當位置,直到全部插入完成為止。不同插入排序演算法的最根本的不同點是根據什麼規則去找新元素的插入點,直接插入排序是依次尋找,希爾排序縮小增量再使用直接插入排序。

直接插入排序

  • 基本思想 
    直接插入排序是一種最簡單的排序方法,它就是依次將無序區中的每一個元素插入到一個有序區中去。
  • 例子 
    {4,5,1,2,8,6,7,3,10,9} 
    取無序區間的第一個,從右向左掃描有序區間比較,方括號內可視為有序區間。 
    第一次:[4],5,1,2,8,6,7,3,10,9 
    第二次:[4,5],1,2,8,6,7,3,10,9 
    第三次:[1,4,5],2,8,6,7,3,10,9 
    第四次:[1,2,4,5],8,6,7,3,10,9 
    第五次:[1,2,4,5,8],6,7,3,10,9 
    第六次:[1,2,4,5,6,8],7,3,10,9 
    第七次:[1,2,4,5,6,7,8],3,10,9 
    第八次:[1,2,3,4,5,6,7,8],10,9 
    第九次:[1,2,3,4,5,6,7,8,10],9 
    第十次:[1,2,3,4,5,6,7,8,9,10]
  • 演算法分析 
    直接插入排序演算法的空間複雜度為O(1)。 
    最好的情況,要比較的無序序列原本就是順序有序的,那麼要比較的次數是n-1,移動了0次,時間複雜度O(n)。 
    最壞的情況,要比較的無序序列原本就是逆序有序的,那麼要比較的次數是(n+2)(n-1)/2,移動的次數(n+4)(n-1)/2,時間複雜度O(n²)。 
    直接插入排序的平均複雜度為O(n²)。 
    直接插入排序是穩定的。

1、選擇排序  基本思想:

選擇排序是一種簡單直觀的排序演算法,其基本原理如下:對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第一個記錄的位置交換;接著對不包括第一個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換;重複該過程,知道進行比較的記錄只剩下一個為止。

2、複雜度分析:

從簡單選擇排序的過程來看,它最大的特點是交換移動資料次數相當少,這樣就節約了相應的時間。分析它的時間複雜度發現,無論是最好最差情況,其比較次數都是一樣多,第 i 趟排序需要進行 n-i 次關鍵字比較,此時需要比較次這裡寫圖片描述,對於交換次數而言,當最好的時候,交換0次,最差的時候,也就是初始降時,交換次數為 n-1 次,基於最終的時間排序與交換次數總和,因此,總的時間複雜度依然為這裡寫圖片描述。 
儘管與氣泡排序同為這裡寫圖片描述,但簡單選擇排序的效能要優於氣泡排序。

3、排序過程如下:

以陣列{49,38,65,97,76,13,27,49}為例, 
這裡寫圖片描述