簡體   English   中英

O(n)排序算法

[英]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 logn)更好的復雜性。

但請注意,您的實現實際上是O(n + size)

它是O(n) 更具體地說,它是O(n + k) ,其中n是輸入數組中元素的數量, k是大小寫中的輸入范圍。 您只是保留數組中出現的所有元素的計數。 然后,您只需按原樣陣列中的順序存儲它們的次數。 該算法稱為計數排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM