c++ - O(n) 排序算法

标签 c++ sorting

这是一个非常可怕的排序算法,它只适用于从 0 到 size 的整数。我不会对大量数据或其中包含大量数据的数据使用这样的算法,因为它需要太多内存。考虑一下,这个算法在技术上不会在 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]);
}

最佳答案

您正在显示 radix sort 的变体.连同 bucket sort ,这些算法是不基于比较的排序的主要示例,可以提供比 O(n logn) 更好的复杂性。

但是请注意,您的实现实际上是 O(n + size)

关于c++ - O(n) 排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39643176/

相关文章:

c++ - 这些辅助文件应该在 Git 版本控制之下吗?

c++ - "unable to initialize application 0xc000005"

c++ - 仅编译 if-else 的一部分

c - C 链表中的冒泡排序

python - 按优先级对 Python 字典进行排序

c++ - 调用顺序引用一些信息

c++ - 当子类的析构函数被调用时,父类的析构函数也会被调用吗?

c - C 语言基数排序与 OpenMP 的并行化

javascript - javascript中排序与if else if选择哪一个?

javascript - 如何将数组作为在 Javascript 中添加的项目进行排序?