第一章 演算法基礎 排序演算法

2021-09-28 14:41:46 字數 1680 閱讀 2172

1.5 排序演算法

1.5.1 快速排序

快速排序採用分治法的思想,首先把乙個數值串行分為兩個子串行,然後對兩個子串行再進行分治法的思想。計算過程如下:

1、從熟知佇列中選擇乙個基準元素。

2、將佇列中的其他元素與基準元素比較,比基準元素小的元素放在基準元素的左邊,比基準元素大的元素放在右邊(降序排列則相反),則佇列被基準元素劃分為左右兩個區間。

3、對兩個區間的值分別遞迴步驟2,使其最終形成有序的序列。當區間小於等於1時,則會直接返回。

快速排序方法的時間複雜度及空間複雜度分析如下:

1、時間複雜度:最壞時間複雜度:o(n^2 ),最優的時間複雜度:o(nlg n),平均時間複雜度:o(nlg n)。

2、空間複雜度:快速排序的空間複雜度相對而言依然與具體的實現有關。

1.5.2 歸併排序

歸併排序時指兩個已經有序的序列合併成乙個有序序列的排序方式。歸併排序可以採用迭代的方式進行排序。

假如有兩組數值串行a、b,採用歸併排序進行公升序排列,則排列步驟如下:

1、申請存放最終合併後的數值串行存放空間,空間大小為數值串行a、b的空間之和。

2、初始化兩個指標對應的值,分別指向數值串行a、b的首元素位址。

3、比較兩個指標對應的值,將較小的值放入到最終存放空間,並移動較小值指標到序列的下一位置。

4、重複步驟3,直到某個指標已經指到序列的隊尾,且沒有元素可以和另乙個序列進行比較。

5、將另乙個序列的剩餘元素直接複製到最終序列存放空間的末尾。

歸併排序方法的時間複雜度及空間複雜度分析如下:

1、時間複雜度:最差時間複雜度:o(nlg n ),最優的時間複雜度:o(n),平均時間複雜度:o(nlg n)。

2、空間複雜度:歸併排序的空間複雜度與具體的實現相關,最差空間複雜度不應高於o(n)。

1.5.3 堆排序

堆排序時基於堆的資料結構實現的排序演算法,分為小根堆和大根堆,最小堆的第0個元素是整個堆中的最小值,最大堆的第0個元素是整個堆中的最大堆。

由於堆的堆頂元素是最大值或最小值,所以可以利用此特性,每次從陣列中直接選取出最大值或者最小值,使每次排序變得相對簡單。堆排序的實現步驟可分為以下四步:

堆排序方法的時間複雜度及空間複雜度分析如下:

1、時間複雜度:最壞時間複雜度:o(nlg n ),最優的時間複雜度:o(nlg n ),平均時間複雜度:o(nlg n)。

2、空間複雜度:最差空間複雜度為o(n)。

1.5.4 基數排序

基數排序的原理是將數值按照位數切分為不同數字,然後對每位數分別進行比較,從而達到排序的目的,可以通過以下四個步驟完成。

基數排序方法的時間複雜度及空間複雜度分析如下:

1、時間複雜度:最差時間複雜度:o(k\times n );

2、空間複雜度:最差空間複雜度為o(k\times n),n是元素個數,k是數值的位數,k值決定了需要進行多少輪處理。

以上四個排序為內排序,內排序是指能夠在記憶體中完成的排序。

1.5.5 外排序

當計算機記憶體小於資料本身大小時,無法一次性將資料載入到記憶體,這個時候則需要採用外排序的方式。

外排序主要時針對大檔案的排序,將需要排序的資料檔案存放到儲存器中,每次載入部分資料到記憶體,不斷進行記憶體和外部儲存器之間的資料交換,最終保證檔案中的每個資料都完成排序。

演算法基礎第一章

不同常數時間的操作 加或定址運算或位運算 執行時間不一樣 選擇最小的數,放到陣列的第乙個位置 時間複雜度 c n c n 1 c n 2 c 1 o n 2 額外空間複雜度 o 1 兩兩比較並交換,直到無交換 時間複雜度 o n 2 額外空間複雜度 o 1 左邊序列有序,右邊新加入乙個數,從右往左找...

第一章 基礎演算法(一)

題目 給定乙個按照公升序排列的長度為n的整數陣列,以及 q 個查詢。對於每個查詢,返回乙個元素k的起始位置和終止位置 位置從0開始計數 如果陣列中不存在該元素,則返回 1 1 輸入格式 第一行包含整數n和q,表示陣列長度和詢問個數。第二行包含n個整數 均在1 10000範圍內 表示完整陣列。接下來q...

演算法導論 第一章 1 1 演算法 排序

演算法導論 第一章 1.1演算法 排序 演算法的定義 演算法的形式定義可以看作是任意乙個良定義 該定義是可行的 的計算過程,它以乙個或一些值作為輸入,並產生乙個或一組值作為輸出。因而,乙個演算法也就是一系列的將輸入轉換為輸出的計算步驟。第乙個事例 插入排序 這種演算法對少量的元素進行排序較為有效。插...