7.1簡單排序

weixin_33872660發表於2018-11-21

前提:

  • void X_Sort (ElementType A[], int N)
  • 為簡單起見,討論整數大小的排序。
  • N是正整數。
  • 只討論基於比較的排序。
  • 只討論內部排序。
  1. 氣泡排序:
    從上到下比較相鄰2個泡泡。
void Bubble_Sort (ElementType A[] , int N) {
   for (P = N-1; P>= 0 ; P--) {      
        flag  = 0;
        for (I = 0 ;I< P, I++){   // 一趟冒泡
           if (A[I] > A[I+1]) {
           Swap (A[1], A[I+1]);
           flag = 1;
           }
        }
       if (flag == 0) break;
  }
}

時間複雜度: 最大是 T= O(N平方); 最小 是T = O(N)

  1. 插入排序
    打牌的時候,牌的插入過程。新牌從後往前和前邊的比較,然後插入。
 void Insert_sort (ElementType A[], int N) {
         for ( P = 1; p < N; p++) {
                 Tmp = A[p];  // 摸一張牌
                 for (I = P; I>0 && A[I-1]>Tmp;i--) {
                A[I] = A[I-1];   // 移出空位置。
                }
                A[I] = Tmp;   //將新牌落位。
       }
}

時間複雜度 也是最大是 O(N 平方),最小是O(N)

逆序對:對於下標i<j,如果A[i]>A[j],則稱(i,j)是 一對逆序對(inversion)。

對於插入排序和氣泡排序,T(N, I) = O( N+I ) I是逆序對的個數。

  • 任意N個不同元素組成的序列平均具有 N ( N - 1 ) / 4 個逆序對。
  • 任何僅以交換相鄰兩元素來排序的算 法,其平均時間複雜度為 Ω ( N2 )。

相關文章