設計n個數的排序演算法,並要求計算演算法複雜度

2021-07-12 17:32:44 字數 1730 閱讀 9837

1樓:訾可欣迮詞

氣泡排序的演算法時間複雜度上o(n^2

)氣泡排序是這樣實現的:

首先將所有待排序的數字放入工作列表中。

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

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

氣泡排序的平均時間複雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。

選擇排序

選擇排序是這樣實現的:

設陣列記憶體放了n個待排數字,陣列下標從1開始,到n結束。

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

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

如果i=n-1演算法結束,否則回到第3步

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

2樓:佴宕琴恬欣

你要用什麼排序演算法呢

如果是氣泡排序,那麼時間複雜度為f(n)=o(n²)。

#include

#include

void

sort(int

*arr,intn)}

}//時間複雜度f(n)=1+(n+1)+n(n-1)/2+4×(n-1)(n-2)/2

//=xn²+yn+z

這裡的x,y,z都算常量,如果你想計算就去算//因為時間複雜度至於n的方數有關,所以f(n)=o(n²)intmain()

sort(arr,n);

printf("output

thesort

array:\n");

for(int

j=0;j

printf("\n");

free(arr);

return0;}

//上面算排序演算法的實現和演算法的時間複雜度的計算過程以及結果。要說的時演算法的複雜度主要是時間複雜度,不去研究空間複雜度

對於輸入為n個數進行快速排序演算法的平均時間複雜度是多少?

3樓:cfv呆呆獸

根據t(n) = t(ðn) + o(n) (0 < ð <1) 則有 t(n) = o(n)

因此關鍵問題

是怎樣解決劃分標準的問題, 因此產生下列線性時間找中位數的演算法:

將陣列a有n個元素, 劃分成5個一組, 則共有[n/5]個元素, 對於每組用一般的排序找中位數,需要25次, 則總共需要o(25*[n/5]) = o(n), 然後在這些中位數中遞迴找其中位數需要t(n/5)次,然後以找到的中位數x來作為劃分標準則顯然劃分時間為o(n), 再遞迴的劃分, 顯然最多有3n/4的元素小於或大於x, 則選擇中位數的總複雜度為:

t(n) = o(n) + t(n/5) + t(3n/4) 有t(n) = o(n)。

因此快速排序的複雜度為t(n) = 2t(n/2) + o(n) 有:t(n) = nlogn。

但最壞情況下複雜度為o(n^2),出現此條件的情況是n個數原來就已經按照規定要求排好序了。

設計一個排序演算法,並分析其時間複雜度

4樓:匿名使用者

可以直來接採用氣泡排序,按升序源排列就好。

public void bubblesort(int arr)}if(didswap == false)return;

} }最佳

bai情況為

duo(n),最zhi壞的情況為o(n2)。dao

設計求兩個數的最大公約數的通用函式,演算法不限,要求能反覆輸入資料並輸出其最大公約數

採用輾轉相除法 void fun int a,int b printf na與b的最大公約數是 b 用的我吧,我的 思路清晰易懂。以a和b為例 順便把最小公倍數也求出來。include void main int f1 int x,int y return m 1 這個問題好,是先將a b分解為p ...

輸入數,找出其中最大的數並輸出,設計演算法(不寫步驟)畫出程式框圖,並寫出程式

include stdio.h void main for counter 0 counter 10 counter if a counter max max a counter printf the maximum number is d max turbo c 3.1 驗證 輸入10個數,找出其...

常用的資料排序演算法有哪些,各有什麼特點 舉例結合一種排序演算法並應用陣列進行資料排序

排序簡介 排序是資料處理中經常使用的一種重要運算,在計算機及其應用系統中,花費在排序上的時間在系統執行時間中佔有很大比重 並且排序本身對推動演算法分析的發展也起很大作用。目前已有上百種排序方法,但尚未有一個最理想的盡如人意的方法,本章介紹常用的如下排序方法,並對它們進行分析和比較。1 插入排序 直接...