Xmind 排序演算法

2021-08-18 14:28:57 字數 2876 閱讀 1498

穩定排序:氣泡排序、基數排序、直接插入排序、折半插入排序、歸併排序;

非穩定排序:堆排序、快速排序、希爾排序、直接選擇排序

穩定排序--概念:

假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

在簡單形式化一下,如果ai = aj, ai原來在位置前,排序後ai還是要在aj位置前。

就地排序--概念:in-place原地演算法

快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。

(1) 如果不多於1個資料,直接返回。

(2) 一般選擇序列最左邊的值作為支點資料。

(3) 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。

(4) 對兩邊利用遞迴排序數列。

快速排序比大部分排序演算法都要快。儘管我們可以在某些特殊的情況下寫出比快速排序快的演算法,但是就通常情況而言,沒有比它更快的了。快速排序是遞迴的,對於記憶體非常有限的機器來說,它不是乙個好的選擇。 

通俗的理解就是演算法輸出結果覆蓋演算法的輸入,很明顯,就是省記憶體嘍

fft演算法基於公式的週期對稱性原理,採用**方式的蝶形演算法,前後結果沒有依賴關係,所以從記憶體角度來說,可以直接原地覆蓋掉

這個其實和fft本身沒任何關係,屬於程式程式設計中效能優化記憶體

時間複雜度在於專案間的比較和移動次數,這裡的in-place操作指的就是設定移動次數為0。分析排序演算法中為何需要專案間的移動,主要是為了節省記憶體消耗(空間複雜度),在原有的陣列記憶體空間上進行排序,這樣就需要為已經排好序的資料倒騰記憶體,通常的解決辦法是將要倒騰的記憶體位置上的未排序的資料存在乙個臨時變數(temp)進行儲存,然後其它的資料依次移動。這樣的演算法額外的空間消耗只有o(1)o(1)。題目中的要求是這個臨時變數也不能用。實際上是要解決in-place的資料交換操作。

in-place操作,意思是所有的操作都是」就地「操作,不允許進行移動,或者稱作 原位操作,即不允許使用臨時變數==》不使用額外空間

//設定初始值

int x = 1,y = 2;

1)最先想到的方法,就是設定臨時變數

//設定臨時變數

int temp;

temp = x;

x = y;

y = temp;

2)然而要滿足in-place的要求,就需要另闢蹊徑了。比如通過加減運算實現(但是可能會出現溢位)

//加減運算

x = x + y;

y = x - y;

x = x - y;

3)通過異或操作實現

//異或運算

x = x ^ y;

y = x ^ y;

x = x ^ y;

時間複雜度:

電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的

字串的長度的函式。時間複雜度常用

大o符號

表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。

1.一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

分析:隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。

2. 在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出 t(n) 的同

數量級(它的同數量級有以下:1,log

2n,n,n log

2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n) = 該數量級,若 t(n)/f(n) 求極限可得到一常數c,則時間複雜度t(n) = o(f(n))

按數量級遞增排列,常見的時間複雜度有:

常數階o(1),對數階o(

),線性階o(n),

線性對數階o(nlog2n),平方階o(n^2),立方階o(n^3),...,

k次方階o(n^k),指數階o(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

空間複雜度:

類似於[1]時間複雜度

的討論,乙個演算法的空間複雜度s(n)定義為該演算法所耗費的儲存空間,它也是問題規模n的函式。漸近空間複雜度也常常簡稱為空間複雜度。空間複雜度(spacecomplexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機

儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種演算法是「就地\"進行的,是節省儲存的演算法,有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元,例如快速排序和

歸併排序演算法

就屬於這種情況。

XMind 入門教程

選自 xmind 是一款非常實用的商業思維導圖軟體,應用全球最先進的eclipse rcp 軟體架構,全力打造易用 高效的視覺化思維軟體。對於新手來說,如何使用xmind是安裝完成後的首要問題,xmind新手入門完整攻略是小編給新手使用者的福利,包含建立xmind思維導圖基本入門操作,讓使用者快速上...

XMind如何改變預設設定

問題 xmind 如何改變預設設定 以字型名稱為例 1.xmind 雖然提供了修改預設配置的介面 但是並不能儲存這些設定.2.使用者想要設定自定義的字型名稱 字型大小等等選項 3.需要匯出設定在其它機器上不用再配置即可使用 解決辦法 1.預設設定開啟的介面,如圖 2.開啟設定預設風格的路徑 d pr...

XMind 安裝與公升級 20210210

02 08 2021 擁抱新事物,使用 xmind 2020 版本,安裝過程大致如下 方法一 通過 deb 安裝 預設位於 opt xmind 目錄中 第二步 執行安裝命令 dpkg i xmind 2020 for linux amd 64bit 10.3.1 202101132117.deb 方...