排序演算法有很多種,本文主要介紹基本的排序演算法和實現,並分析複雜度和穩定性。
一、ο(n2)的演算法
1、插入排序
插入排序十分好理解,在無序的陣列中選擇乙個數值,插入到有序的陣列當中,這個過程是穩定的。實現**如下:
1 template 2insertionsortvoid insertionsort(vector&arr)
2、氣泡排序
氣泡排序的過程是遍歷陣列,每次選取乙個數值往前比較,大於前乙個數值就交換,直到遇到更大的數值或遍歷完陣列,這個過程本身也是穩定的。
template void bubblesort(vector&arr)}}bubblesort}
二、ο(nlogn)的演算法
1、歸併排序
歸併排序是典型的分治演算法,把原問題劃分為不相交的子問題。**如下:
1mergesortvoid merge(vector &arr,int l,int m,int
r)17
};18
1920
void mergesort(vector &arr, int l, int
r)28 }
2、堆排序
堆排的本質就是維護乙個最大堆(最小堆),所以他的時間複雜度是與最大堆的性質相聯絡的,乙個最大堆的deletemax操作是o(1)的,而每次deletemax後要維護最大堆的性質,所以維護堆的時間複雜度是o(logn)的,合起來就是o(nlogn)。**實現與建堆類似,就不贅述。
3、快速排序
快排也是分治的思想,選取乙個主元,將陣列分為兩個部分,乙個部分小於它另乙個部分大於它,然後遞迴兩個子陣列直到排序完成。快排和主元的選取有關,如果選取的 結果恰好是排好序的,那麼時間複雜度將會變成o(n2)。
**如下:
1三、線性演算法(以後介紹)int partition(vector &arr, int left, int
right)
7 std::swap(arr[i + 1
], arr[right]);
8return i + 1;9
}10void quicksort(vector &arr,int left,int
right)
1617 }
1、基數排序
2、計數排序
3、桶排序
排序演算法綜述(一)
一.排序演算法說明 1.排序的定義 對一串行物件根據某個關鍵字進行排序 2.分類 可以分為內部排序和外部排序 內部排序 待排序記錄存放在計算機隨機儲存器中進行的排序過程 外部排序 待排序記錄數量很大,以致記憶體一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程。加粗樣式3.術語 時間複雜...
聚類演算法綜述
資料分析對於各種現象的理解起著不可或缺的作用。聚類分析,是有很少的或沒有先驗知識的原始探索,包括跨多種社群的開發研究。多樣性,一方面給了我們許多任務具,另一方面,太多的選項也給了我們很多迷惑。我們的調查統計中出現資料集的聚類演算法 計算機 機器學習,並說明其應用在一些基準資料集,旅行推銷員問題,生物...
推薦演算法綜述(二)
協同過濾 cf 推薦演算法通過在使用者活動中尋找特定模式來為使用者產生有效推薦。它依賴於系統中使用者的慣用資料,例如通過使用者對其閱讀過書籍的評價可以推斷出使用者的閱讀偏好。這種演算法的核心思想就是 如果兩個使用者對於一些項的評分相似程度較高,那麼乙個使用者對於乙個新項的評分很有可能類似於另乙個使用...