冒泡排序、插入排序、交換排序

本文介紹複雜度爲O(N^2)的三種排序:冒泡、插入以及交換,還有插入排序的變種希爾排序;


冒泡排序:(時間複雜度固定,恆爲O(N^2)

void BubbleSort(int a[], int n)
{
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (a[i] > a[i+1])
                swap(a[i], a[i+1]);
}
帶flag標誌的改進冒泡排序:

void BubbleSort2(int a[], int n)
{
    for (int i = 0; i < n-1; i++)
    {
          bool flag = false;
          for (int j = 0; j < n-i-1; j++)
          {
               if (a[j] > a[j+1])
               {
                   swap(a[i], a[j+1]);
                   flag = true;
               }
          }
          if (!flag) break;
    }
}

插入排序

void InsertSort(int a[], int n)
{
    for (int i = 1; i < n; i++)
    {
         int key = a[i];
         int j = i-1;
         while (j >= 0 && a[j] > a[i]) j--;
         for (int k = j+1; k < i; k++) a[k+1] = a[k];
         a[j+1] = key;
    }
}         

插入排序的變種--希爾排序:


。。。


選擇排序:不穩定排序

void SelectionSort(int a[], int n)
{
    for (int i = 0; i < n-1; i++)
    {
        int index = i;
        for (int j = i+1; j < n; j++)
        {
             if (a[index] > a[j])
                 index = j;
        }
        if (i != index) swap(a[i], a[index]);
    }
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章