java 多種排序演算法

2021-08-16 16:29:03 字數 1354 閱讀 1137

1、時間頻度

乙個演算法中的語句執行次數叫做語句頻度或時間頻度,用t(n)表示。理論上無法計算乙個演算法執行所需的時間,必須上機測試才能知道,但是我們不可能也沒必要對每個演算法都進行上機測試,我們只需要知道哪個演算法執行時間長,哪個演算法執行時間短即可。演算法花費的時間和演算法中語句執行次數成正比,哪個演算法中語句執行次數多,花費時間就長,所以我們只需要知道語句執行次數就可以知道演算法大致的執行時間。

2、時間複雜度

問題規模用n表示,當n不斷變化時,時間頻度t(n)也會發生變化,我們並不關注某個問題規模的時間頻度,而是想知道時間頻度隨著問題規模n的變化呈現怎樣的變化趨勢,因此提出了時間複雜度概念。演算法中基本操作重複執行次數是n的某個函式,記為t(n),當n趨於無窮大的時候,如果t(n)/f(n)無限接近非零數,我們就稱t(n)和f(n)是同數量級函式,記作t(n)=o(f(n)),稱o(f(n))是演算法的漸進時間複雜度,簡稱時間複雜度。本質上,時間複雜度是時間頻度的同階無窮小,即時間複雜度=o(時間頻度),而上式中的f(n)其實就是演算法中頻度最大的語句頻度。不同的時間頻度,有可能對應相同的時間複雜度。比如,t(n)=2n^2和t(n)=4n^2,雖然二者的時間頻度不同,但時間複雜度都是o(n^2)。

時間複雜度關注的是隨著問題規模n的變化(比如線性變化),演算法執行時間會呈什麼樣的趨勢變化,有的不會變,有的線性變化,有的指數變化。比如問題規模從n變到2n,如果執行時間也是線性變化,那麼就是線性複雜度,如果執行時間指數變化,那麼就是指數複雜度。

常見的時間複雜度有:常數階o(1)、對數階o(log2n)、線性階o(n)、線性對數階o(nlog2n)、平方階o(n2)、立方階o(n3)、...、k次方階o(n^k)、指數階o(2^n)等。

一般我們說的時間複雜度就是最壞時間複雜度,即最壞情況下的時間複雜度,是所有輸入例項的上屆,這樣就能保證演算法的執行時間不會比最壞時間複雜度下的時間長。平均時間複雜度是指所有可能的輸入例項均以等概率出現的情況下,演算法的期望執行時間。

3、空間複雜度

空間複雜度是指執行完乙個程式所需的記憶體大小。利用空間複雜度,我們可以預估執行所需記憶體。包括兩部分,固定部分和可變部分。

固定部分:指令空間(**空間)、資料空間(常量、簡單變數)等所佔的空間,與輸入/輸出資料的個數大小數值無關,屬於靜態空間。

可變部分:與具體演算法有關,包括動態分配的空間,以及遞迴棧所需的空間等。假設演算法所需的儲存空間是f(n),那麼演算法空間複雜度是o(f(n))。

設計演算法時,我們要考慮演算法的時間複雜度和空間複雜度,目的在於,要知道隨著問題規模的變化,演算法執行時間和空間會以怎樣的趨勢變化。複雜度越小,執行時間越快,占用空間越小,這也是演算法設計的目標。

此圖**於網路。

多種c 排序演算法

1.插入排序的優化 2.步長 一開始設定為 元素個數 2 3.步長次排序 每次排序完,步長減一 每次排序都以步長為間隔給所有元素分組,組內作插入排序。function.cpp中包括了氣泡排序,插入排序,選擇排序,shell排序 include function.h void sawp int a,i...

java排序演算法

1.定義 通過比較來確定輸入序列1,a 2,a n 的元素間相對次序的排序演算法稱為比較排序演算法。2.演算法解釋 1 選擇排序 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2...

Java排序演算法

回顧一下排序演算法 稍微地設計一下基礎類 插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。氣泡排序 氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在...