zoukankan      html  css  js  c++  java
  • 基于桶排序的两种排序

    1.计数排序

      T(n)=O(n),S(n)与桶的数量有关,算法稳定。

    int* countingSort(int* A, int n) {
            // write code here
            int Max=A[0];//确定桶的数量
            for(int i=1;i<n;i++)
                Max=Max<A[i]?A[i]:Max;
    
            vector<vector<int> > data(Max+1);
            for(int i=0;i<n;i++)
                data[A[i]].push_back(A[i]);
    
            int k=0;
            for(int i=0;i<data.size();i++){
                for(int j=0;j<data[i].size();j++)
                    A[k++]=data[i][j];
            }
            return A;
    
        }

    2.基数排序

    T(n)=O(n*m),m是所排序的最大位数。

    S(n)=O(n),算法稳定。

    int* radixSort(int* A, int n) {
            vector<vector<int> > data(10);
            for(int p=1;p<=4;p++){
                for(int i=0;i<n;i++){
                    int num=(A[i]%(int)pow(10,p))/pow(10,p-1);
                    data[num].push_back(A[i]);
                }
                int k=0;
                for(int i=0;i<data.size();i++){
                     for(int j=0;j<data[i].size();j++)
                         A[k++]=data[i][j];
                    data[i].clear();
                }
            }
            return A;
    }
  • 相关阅读:
    错题
    URL和URI区别
    适配器
    JAVA 反射机制
    JAVA 面试题
    JAVA 继承
    多态 JAVA
    Java面向对象编辑
    [LeetCode] Merge k Sorted Lists
    [LeetCode] Valid Palindrome
  • 原文地址:https://www.cnblogs.com/lshao/p/8994222.html
Copyright © 2011-2022 走看看