[英]O(n) sorting algorithm
這是一個非常可怕的排序算法,只適用於從0到大小的整數。 我不會在大量數據或大數據中使用這樣的算法,因為它需要這么多的內存。 考慮一下,這個算法技術上不會在O(n)時間內運行嗎?
謝謝
#include <iostream>
#define size 33
int main(){
int b[size];
int a[size] = {1,6,32,9,3,7,4,22,5,2,1,0};
for (int n=0; n<size; n++) b[n] = 0;
for (int n=0; n<size; n++){
if (size <= a[n]) throw std::logic_error("error");
b[a[n]]++;
}
int x = 0;
for (int n=0; n<size; n++){
for (int t=0; t<b[n]; t++){
a[x] = n;
x++;
}
}
for (int n=0; n<size; n++) printf("%d ",a[n]);
}
它是O(n) 。 更具體地說,它是O(n + k) ,其中n
是輸入數組中元素的數量, k
是大小寫中的輸入范圍。 您只是保留數組中出現的所有元素的計數。 然后,您只需按原樣陣列中的順序存儲它們的次數。 該算法稱為計數排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.