如何對n個整數數進行排序要求時間複雜度on空

2021-03-04 02:35:10 字數 4142 閱讀 5650

1樓:手機使用者

可以申請一個大小為65536的陣列a,陣列的x下標代表數字x,a[x]代表x 在整數序列中出現的次數。掃描一遍整數序列就可以完成對該整數序列的排序,時間複雜度為o(n)

如何對n個整數數進行排序,要求時間複雜度o(n),空間複雜度o(1)

2樓:等你愛我

題目:如何對n個不重複出現的整數序列進行排序,已知這些數的範圍為(0-65535),要求時間複雜度o(n),空間複雜度o(1)分析:可以申請一個大小為65536的陣列a,陣列的x下標代表數字x,a[x]代表x 在整數序列中出現的次數。

掃描一遍整數序列就可以完成對該整數序列的排序,時間複雜度為o(n)應為已知範圍,申請大小為65536的陣列,大小為常量,所以空間複雜度為o(1)**:

3樓:迮蕊釗德潤

可以申請一個大小為65536的陣列a,陣列的x下標代表數字x,a[x]代表x

在整數序列中出現的次數。掃描一遍整數序列就可以完成對該整數序列的排序,時間複雜度為o(n)

如何對n個數進行排序,要求時間複雜度o,空間複雜度o

4樓:鍾萌納

題目:如何對n個不重複出現的整數序列進行排序,已知這些數的範圍為(0-65535),要求時間複雜度o(n),空間複雜度o(1)分析:可以申請一個大小為65536的陣列a,陣列的x下標代表數字x,a[x]代表x 在整數序列中出現的次數.

掃描一遍整數序列就可以完成對該整數序列的排序,時間複雜度為o(n)應為已知範圍,申請大小為65536的陣列,大小為常量,所以空間複雜度為o(1)**:1:#include 2:

#define size 65536 3:void rangesort(int *array,int len) 4:{ 5:

int data[size] ; 6:int i = 0 ; 7:int j = 0 ; 8:

memset(data,0,size*sizeof(int)) ; 9:for(i=0;i

如何對n個數進行排序,要求時間複雜度o,空間複雜度o

5樓:匿名使用者

o什麼,要知道,排序理論最快時間複雜度只能是nlogn,不能再快,這是有證明的。想要提高速度用c++函式庫的qsort();

6樓:超超露露戀

建議用qsort()函式,

它編譯器函式庫自帶的快速排序函式。

使用qsort()排序並用 bsearch()搜尋是一個比較常用的組合,使用方便快捷。

qsort 的函式原型是

void qsort(void*base,size_t num,size_t width,int(__cdecl****pare)(const void*,const void*));

在限定時間複雜度o(n),空間複雜度o(1)條件下,對陣列排序。要求大於0元素的在數字0左邊,小於

7樓:緣明思

不知道數字的總量嗎?

是否隊首隊尾指標相等,是則結束迴圈。

如果隊首小於0,則觀察隊尾。

隊尾大於0,則交換隊首隊尾。小於則,隊尾保留,向隊首移動1個比較直至可以交換。

等於0則

如果隊尾指標為下一個隊首指標的位置,則只比較和交換。

否則,交換該元素和其下一個元素。且不移動隊尾指標。

如果隊首大於0,則向隊尾移動1個繼續比較。

如果隊首等於0,

如果隊尾指標為下一個隊首指標的位置,則只比較和交換。

否則,交換該元素和其下一個元素。且不移動隊首指標。

由於0元素的存在和無法確定的陣列長度,導致我想出來的這個破東西的時間複雜度大概是n+n/2

好像還是算作n的。

8樓:匿名使用者

大神大聲的告訴我什麼排序方法的平均時間複雜度是o(n)?

快速排序方法的時間複雜度為o(n^2)=n(n-1)/2.

9樓:匿名使用者

1)對於你的問題簡單解釋如下:

理論計算機研究中,衡量演算法一般從兩個方面分析:時間複雜度和空間複雜度。空間複雜度跟時間複雜度是類似的,下面簡單解釋一下時間複雜度:

對於一個資料規模為n的問題,解決該問題的演算法所用時間可以用含有n的函式t(n)來表示。對於絕大多數情況,我們只需要瞭解演算法的一般效能而不考慮細節,也就是說,我們只關心函式t(n)的表示式的形式,而不關心表示式的常數係數等與資料規模沒有關係的量值。對於函式t(n),我們又進一步將它簡化為o(n),即只考慮演算法平均執行時間的「瓶頸」,也就是t(n)表示式中,關於變數n增長最快的哪一項。

比如下面的**:

for(int i=1; i<=n*2; i++)for(int j=1; j<=n; j++)// do something here

那麼這個演算法的時間複雜度就是o(n^2),因為它有兩層迴圈,每層迴圈的資料規模都是n。注意第一層迴圈(外迴圈)要迭代n*2次,則實際上t(n)=2*n*n,而對於o(n)來說,我們忽略了常數2,只保留了n^2。這就是大o記法的一個概括,並不精確。

對於時間複雜度的更精確、深入的解釋,可以自己查閱《演算法導論》第一章。

2)更正你的問題:快速排序演算法的時間複雜度應該為o(n lg n)。注意三種時間複雜度符號表示的不同意義!

英文字母o代表的是平均執行時間,因此對於快速排序來說應該是o(n lg n)。而使用下界函式omega或者上界函式theta則分別表示演算法執行的最快和最慢時間。對於未使用隨機化的快速排序,理論上可以證明,存在某一方法構造出一組資料使快速排序「退化」成平方複雜度演算法即theta(n^2)。

但是對於其o(n)表示法應該為o(n^2)。

10樓:匿名使用者

n 趨於無窮大時無窮大的階數。

同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。

電腦科學中,演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。

使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。

演算法時間複雜度的表示法o(n²)、o(n)、o(1)、o(nlogn)等是什麼意思?

11樓:匿名使用者

o(n²)表示關於n的2階無窮小量。當n線性增長時,計算量按n²規律增大。

o(1)表示計算量不變。

其它類似

12樓:匿名使用者

演算法的時間複雜度是一個函式,它定量描述了該演算法的執行時間。這是一個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高.

例:演算法:

for(i=1; i<=n; ++i)

}則有 t(n) = n 的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定 n的三次方 為t(n)的同數量級

則有 f(n) = n的三次方,然後根據 t(n)/f(n) 求極限可得到常數c

則該演算法的時間複雜度:t(n) = o(n^3)

數字沒有出現,哪些數字出現了多少次.要求時間複雜度o 空間複雜度o

13樓:某某知識博士

題目:如何對n個不重複出現的整數序列進行排序,已知這些數的範圍為(0-65535),要求時間複雜度o(n),空間複雜度o(1)分析:可以申請一個大小為65536的陣列a,陣列的x下標代表數字x,a[x]代表x 在整數序列中出現的次數。

掃描一遍整數序列就可以完成對該整數序列的排序,時間複雜度為o(n)應為已知範圍,申請大小為65536的陣列,大小為常量,所以空間複雜度為o(1)**:?? 1: #include2:

#define size 65536 3: void rangesort(int *array,int len) 4: 12:

i = 0 ; 13: for(j=0;j

14樓:陽光下追夢

遍歷一遍即可啊 時間按複雜度o(n);

輸入正整數n再輸入n個整數輸出最小值用

1 首先,定bai義三個整型變數,儲存du正整數zhi 臨時變數和各位數dao 總和。2 給內變數總和sum賦值,初容值為0。3 接著,輸入正整數,儲存在變數n中。4 給臨時變數賦值,讓它的值等於正整數的值。5 用while語句判斷,判斷的條件為n不等於0。6 條件成立時,求正整數各位上數字的和。7...

找出最小值 輸入整數n,再輸入n個整數,輸出最小值。編寫相應程式

include int main int argc,char argv printf 依次輸入 d個整數 n n for i 0 i n i printf 最小數 d n min return 0 c語言,求最小值 輸入一個正整數n,再輸入n個整數,輸出最小值。試編寫相應程式。把這些數都裝在一個陣列...

證明對任意正整數n,存在正整數x,使無窮數列x1,xx

表達bai式有些歧義,是無窮序列dux 1,x x 1,x x x 1,取x 2n 1,可以證明zhi對任意正dao奇數2m 1,x 2m 1 1都被n整除.證明的方法回有很多答,最簡單的是用同餘 x 2n 1 1 mod n 故x 2m 1 1 2m 1 1 mod n 即n x 2m 1 1.也...