嵌入式LinuxC基礎 排序

2021-08-17 10:00:42 字數 2907 閱讀 5404

1.排序的穩定性

只有含有相同元素才有穩定性。相同元素的相對位置發生變化,怎不穩定。相對位置不變,則穩定。

2.直接插入排序

對於給定的一組記錄,初始時假定第乙個記錄自成乙個有序的序列,其餘的記錄為無序序列;接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直至最後乙個記錄插入到有序序列為止。

穩    定    性:穩定

時間複雜度: o(n^2)

(1)初始資料正序,總比較次數:n-1

(2)初始資料逆序,總比較次數:(n2+n-1)/2=                       o(n2)

(3)初始資料無序,第i趟平均比較次數(i+1)/2,總次數為:(n2+3n)/4=o(n2)

(4)可見,原始資料越趨向正序,比較次數和移動次數越少。

3.希爾排序

希爾排序也稱為「縮小增量排序」,基本原理是:首先將待排序的元素分為多個子串行,使得每個子序的元素個數相對較少,對各個子序分別進行直接插入排序,待整個待排序序列「基本有序後」,再對所有元素進行一次直接插入排序。

具體步驟如下:

(1)選擇乙個步長序列t1, t2, ..., tk,滿足ti > tj(i

(2)按步長序列個數k,對待排序序列進行k趟排序。

(3)每趟排序,根據對應的步長ti,將待排序的序列分割成ti個子序列,分別對各個子串行進行直接插入排序。

希爾排序的特點:

時間複雜度:希爾排序的時間複雜性在o(nlog2n)和o(n2 )之間,大致為o(n1.3)。

穩    定    性:不穩定

4.氣泡排序

對於給定的n個記錄,從第乙個記錄開始依次對相鄰的兩個記錄進行比較,當前面的記錄大於後面的記錄時,交換其位置,進行一輪比較和交換位置後,n個記錄中的最大記錄將位於第n位;然後對前(n - 1)個記錄進行第二輪比較;重複該過程直到進行比較的記錄只剩下乙個為止。

氣泡排序基本思想是:對待排序的數字進行兩兩比較,如發現兩個數字是反序的,則進行交換,直到無反序的記錄為止。

氣泡排序特點分析:

時間複雜度:總共比較 n(n-1)/2 次  時間複雜度為o(n2)

穩     定   性:穩定

5.快速排序

快速排序是一種非常高效的排序方法,採用「分而治之」的思想,把大的拆分為小的,小的在拆分為更小的。

原理是:對於一組給定的記錄,通過一趟排序後,將原序列分為兩部分,其中前部分的所有記錄均比後部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中的所有記錄均為有序為止。

快速排序特點:

穩        定        性:不穩定

平均時間複雜度: o(nlog2n)

6.簡單選擇排序

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

簡單選擇排序特點:

最 大 特 點:移動次數少。

時間複雜度:總共比較 n(n-1)/2 次 ,移動次數最多n-1, 時間複雜度為o(n2)

穩定性:穩定。

7.堆排序

堆排序是一種特殊的樹形資料結構,其每個節點都有乙個值,通常提到的堆都是指一棵完全二叉樹,根節點的值小於(或大於)兩個子節點的值,同時根節點的兩個子樹也分別是乙個堆。堆排序主要包括兩個過程:一是構建堆, 二是交換堆頂元素與最後乙個元素的位置。

堆排序思想:

1.   將序列構造成一棵完全二叉樹 ;

2.   把這棵普通的完全二叉樹改造成堆,便可獲取最小值 ;

3.   輸出最小值 ;

4.   刪除根結點,繼續改造剩餘樹成堆,便可獲取次小值 ;

5.   輸出次小值 ;

6.   重複改造,輸出次次小值、次次次小值,直至所有結點均輸出,便得到乙個排序 。

堆排序的特點:

穩  定  性:不穩定

時間複雜度:o(nlogn)

堆排序對記錄較少的檔案效果一般,但對於記錄較多的檔案很有效果,其執行時間主要耗費在建立堆與調整堆上

8.歸併排序

利用遞迴與分治技術將資料序列劃分為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列。

原理如下:對於給定的一組記錄,首先將兩個相鄰的長度為1的子串行進行歸併,得到n/2個長度為2或者1的有序子串行,在將其兩兩歸併,反覆執行此過程,直到得到乙個有序的序列為止。

歸併排序特點:

平均時間複雜度:    o(nlog2n)

穩         定       性:    穩定

9.基數排序

基數排序(radix sorting)是一種借助多關鍵字排序的思想對單邏輯關鍵字進行關係的方法。基數排序不需要進行記錄關鍵字間的比較。

主要分為兩個過程:

(1)分配,先從個位開始,根據位值(0-9)分別放到0~9號桶中(比如53,個位為3,則放入3號桶中)

(2)收集,再將放置在0~9號桶中的資料按順序放到陣列中 

基數排序的特點:

穩  定  性:穩定

時間複雜度:o(kn)(k表示整形的最高位)

空間複雜度:o(10n)

排序演算法比較:

從平均情況看:堆排序、歸併排序、快速排序勝過希爾排序。

從最好情況看:氣泡排序和直接插入排序更勝一籌。

從最差情況看:堆排序和歸併排序強過快速排序。

雖然直接插入排序和氣泡排序速度比較慢,但是當初始序列整體或區域性有序是,這兩種演算法的效率比較高。當初始序列整體或區域性有序時,快速排序演算法效率會下降。當排序序列較小且不要求穩定性是,直接排序效率較好;要求穩定性時,氣泡排序法效率較好

嵌入式Linux c 基礎

資料型別 向計算機申請儲存資料的記憶體大小,如int 申請4位元組的大小。變數是用來儲存值的所在處,它們有名字和資料型別.變數的資料型別決定了如何將代表這些值的位儲存到計算機的記憶體中 試卷的筆記 電腦是x86 裸機是arm 編譯程式 gcc 和 arm linux gcc 字串表示 反斜槓要必須雙...

嵌入式LinuxC基礎 指標(一)

1.指標的算術運算 指標 整數,這類表示式的結果型別也是指標。指標 只有當兩個指標都指向同乙個陣列中的元素時,才允許從乙個指標減去另乙個指標。兩個指標相減的結果的型別是有符號的整數型。2.指標的關係運算 前提是他們指向同乙個陣列中的元素。3.間接引用 對於已說明的變數來說,變數名就是變數值的直接引用...

嵌入式LinuxC基礎 檔案程式設計

1.linux檔案分類 普通檔案 計算機使用者和作業系統用於存放資料 程式等資訊的檔案。目錄檔案 linux檔案系統將檔案索引節點號和檔名同時儲存在目錄中,所以目錄檔案就是將檔名稱和它的索引節點號結合在一起的一張表。裝置檔案 linux把所有的外設都當作檔案來看待,每一種i o裝置對應乙個裝置檔案並...