[英]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.