排序演算法總結及感悟

2021-08-14 15:00:35 字數 1476 閱讀 3342

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀演算法,得經過大量的推理和分析。

一、演算法列表

①、穩定的排序演算法

氣泡排序

插入排序

②不穩定的排序演算法

選擇排序

希爾排序

堆排序快速排序

二、具體演算法

插入排序

1、首先新建乙個空列表,用於儲存已排序的有序數列(我們稱之為"有序列表")。

2、從原數列中取出乙個數,將其插入"有序列表"中,使其仍舊保持有序狀態。

3、重複2號步驟,直至原數列為空。

插入排序的平均時間複雜度為平方級的,效率不高,但是容易實現。它借助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。

插入排序的基本思想是在遍歷陣列的過程中,假設在序號 i 之前的元素即 [0..i-1] 都已經排好序,本趟需要找到 i 對應的元素 x 的正確位置 k ,並且在尋找這個位置 k 的過程中逐個將比較過的元素往後移一位,為元素 x 「騰位置」,最後將 k 對應的元素值賦為 x ,一般情況下,插入排序的時間複雜度和空間複雜度分別為 o(n2 ) 和 o(1)。[1] 

氣泡排序

1、從列表的第乙個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。

2、重複1號步驟,直至再也不能交換。

氣泡排序的平均時間複雜度與插入排序相同,也是平方級的,但氣泡排序是原地排序的,也就是說它不需要額外的儲存空間。

選擇排序

1、設陣列內存放了n個待排數字,陣列下標從1開始,到n結束。

2、初始化i=1

3、從陣列的第i個元素開始到第n個元素,尋找最小的元素。

4、將上一步找到的最小元素和第i位元素交換。

5、i++,直到i=n-1演算法結束,否則回到第3步

選擇排序的平均時間複雜度也是o(n^2)的。

快速排序

現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關係,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何乙個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查詢資料得另當別論了

三、時間複雜度

平均時間複雜度

插入排序 o(n^2)

氣泡排序 o(n^2)

選擇排序 o(n^2)

快速排序 o(n log n)

堆排序 o(n log n)

歸併排序 o(n log n)

希爾排序 o(n^1.25)

排序演算法實現及總結

1 氣泡排序 時間複雜度 最壞情況和平均情況 o n 最好情況 o n 屬於穩定排序 void bubble sort vector int nums if flag 0 break return 2 選擇排序 時間複雜度 最壞情況,最好情況,平均情況 o n 不是穩定排序 適用於資料量小的或有部分...

2016 10 20 會議總結及感悟

今天我們社團進行了第三次會議,以此來激勵我們學習,聽完以後,感觸頗多,也為自己最近的懶惰而慚愧。學姐在會上批評了我們這些不學無術的人,沒有學習的激情,真是無力反駁,學姐整天也挺累的,還要每天 為我們操心,沒法面對學姐了,以後每天一定要好好學習了,我們會長一天才睡五個小時,整天在寫 而自己卻每天在玩,...

Linux命令總結及感悟

1.簡單命令 who 列出所有正在使用系統的使用者,所用終端名和註冊到系統的時間 echo 將命令列中的引數顯示到螢幕上 date 在螢幕上顯示或設定系統的日期和時間 cal 顯示任意一年或一月的日曆 clear 清除螢幕上的資訊 passwd 把原來的口令改為乙個更安全的字串 2.檔案操作命令 l...