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

2021-03-26 12:22:36 字數 2718 閱讀 5368

1樓:等你愛我

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

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

2樓:迮蕊釗德潤

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

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

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

3樓:mean有方法的

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

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

4樓:手機使用者

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

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

5樓:緣明思

不知道數字的總量嗎?

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

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

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

等於0則

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

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

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

如果隊首等於0,

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

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

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

好像還是算作n的。

6樓:匿名使用者

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

要求對陣列a進行排序,要求時間複雜度為o

7樓:盛道農業

先排序抄,複雜度為o(n log n),然後去重,也就是去掉相鄰的相同元素即可,複雜度o(n),故總的複雜度為則*a, *(a+1)到*(b-1)為無重的元素。sort和unique均為stl的演算法,標頭檔案algorithm。

8樓:匿名使用者

treeset的比較器排序

快速排序方法的時間複雜度為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符號表述,不包括這個函式的低階項和首項係數。

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

對陣列a中的n 0n100 個整數從小到大進行連續

思路 step1 先將輸入後的a陣列複製到b陣列中去 step2 對b陣列元素用起泡法由小到大排序 step3 元素b 0 的大小標號為1,比較b j 1 和b j 的大小,如果b j 1 b j 則標號大小 1,如果b j 1 b j 則標號不變,b j 的標號放在陣列b1中,由b1 j 記錄元素...

如何證明n個連續整數的乘積 能被n!整除

哥德 猜想的證明 一 引子 1742年6月7日哥德 寫信給當時的大數學家尤拉,正式提出了以下的猜想 a 任何一個大於 6的偶數都可以表示成兩個素數之和。b 任何一個大於9的奇數都可以表示成三個素數之和。這就是哥德 猜想。哥德 猜想 大於6的偶數可以表示為兩個奇素數之和。這裡大於6的偶數,是指大於或等...

n個連續整數的乘積一定能被n 整除

設a為任一整數,則式 a 1 a 2 a n a n a n a n a n 而式中 a n a n 恰為c a n,a 也即是從a n中取出a的組合數,當然為整數。所以 a 1 a 2 a n 一定能被n 整除 n!1 2 3 4 n 高3你會學到的。這樣 n個連續整數的乘積一定能被n 整除 啊 ...