極客時間 排序 計數排序

2021-10-07 06:28:35 字數 813 閱讀 6713

「計數排序只能用在資料範圍不大的場景中,如果資料範圍 k 比要排序的資料 n 大很多,就不適合用計數排序了。而且,計數排序只能給非負整數排序,如果要排序的資料是其他型別的,要將其在不改變相對大小的情況下,轉化為非負整數。比如,還是拿考生這個例子。如果考生成績精確到小數後一位,我們就需要將所有的分數都先乘以 10,轉化成整數,然後再放到 9010 個桶內。再比如,如果要排序的資料中有負數,資料的範圍是[-1000, 1000],那我們就需要先對每個資料都加 1000,轉化成非負整數。」

package data.sort.line;

public class countsort

} //確定桶的數量,建立乙個maxsize+1的桶陣列,桶下標代表數值,桶中存放值代表重複資料的數量

int bubble=new int[maxsize+1];

//2)把值相等的資料放入到同乙個桶中,統計每個桶的數量

for(int j=0;j=0;k--)

}*///正確實現 從後向前迴圈,目的是為了保證穩定性

//如原本陣列中2 2 2 是在0 1 2的位置 經過上述步驟得到bubble 0 1 3

//第乙個2應該是 bubble[2]也就是3 被放在了下標是2的c中,但是原本在的位置是0

for(int i=b.length-1;i>=0;i--)

return c; }

public static void main(string args) ;

a=countsort.countsort(a);

for(int i=0;i}}

極客時間 排序 快速排序

public class fastsort int index findindex a,left,right mergesort a,left,index 1 分解 mergesort a,index 1,right 分解 1.取最後乙個元素值為k,從左到右找出乙個大於k的值ki,從右到左開始遍歷,...

O n 時間的排序 計數排序

題目 某公司有幾萬名員工,請完成乙個時間複雜度為 o n 的演算法對該公司員工的年齡作排序,可使用 o 1 的輔助空間。分析 排序是面試時經常被提及的一類題目,我們也熟悉其中很多種演算法,諸如插入排序 歸併排序 氣泡排序,快速排序等等。這些排序的演算法,要麼是 o n2 的,要麼是 o nlogn ...

計數排序(線性時間排序) 演算法導論

之前的排序都是通過比較得到的,即比較排序 在排序的最終結果中,各元素的次序依賴與它們之間的比較。而時間複雜度最好的也是o nlgn 接下來說乙個未經比較的排序,而複雜度則是線性的。計數排序 假設n個輸入元素的每乙個都是在0 k區間內的乙個整數,其中k為某個整數。當k o n 時,排序的執行時間為o ...