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); 1 首先,定bai義三個整型變數,儲存du正整數zhi 臨時變數和各位數dao 總和。2 給內變數總和sum賦值,初容值為0。3 接著,輸入正整數,儲存在變數n中。4 給臨時變數賦值,讓它的值等於正整數的值。5 用while語句判斷,判斷的條件為n不等於0。6 條件成立時,求正整數各位上數字的和。7... 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個整數,輸出最小值。試編寫相應程式。把這些數都裝在一個陣列... 表達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.也...輸入正整數n再輸入n個整數輸出最小值用
找出最小值 輸入整數n,再輸入n個整數,輸出最小值。編寫相應程式
證明對任意正整數n,存在正整數x,使無窮數列x1,xx