zoukankan      html  css  js  c++  java
  • 桶排序算法

      事先知道序列中的记录都位于某个小区间段[0,m)内。 将具有相同值的记录都分配到同一个桶中,然后依次按照编号从桶中取出记录,组成一个有序序列。

    桶式排序算法

    template <class Record>
    class BucketSorter:public Sorter<Record,Compare> {
        //桶式排序类
        public:
               void Sort(Record Array[],int n,int max);
    };
    template <class Record>
    void BucketSorter<Record>::Sort(Record Array[], int n,int max) { 
         int* TempArray=new Record[n];   //临时数组
         int* count=new int[max];//小于等于i的元素个数
         int i;
         for (i=0;i<n;i++)  TempArray[i]=Array[i];
         //所有计数器初始都为0
         for (i=0;i<max;i++)        count[i]=0;
         //统计每个取值出现的次数
         for (i=0;i<n;i++)   count[Array[i]]++;
         //统计小于等于i的元素个数
         for (i=1;i<max;i++)   count[i]=count[i-1]+count [i];  
         //按顺序输出有序序列
         for (i=n-1;i>=0;i--)         //从后向前去安排顺序
             Array[--count[TempArray[i]]] = TempArray[i];
    }

    算法分析:

    • 时间代价:

    –  统计计数时:Θ(n+m)

    –  输出有序序列时循环n次

    –  总的时间代价为Θ(m+n)

    –  适用于m相对于n很小的情况

    • 空间代价:

    –  m个计数器,长度为n的临时数组,Θ(m+n)

    • 属于稳定性排序

    注意:当m相对n很大时,桶排序便不再适用。

    桶排序案例分析:

    将待排序的数组从后往前排。

  • 相关阅读:
    git的学习笔记
    软件工程概论第一周综合测验
    人月神话读后感
    软件工程概论通读第十一章
    软件工程概论通读第十章
    软件工程概论通读第九章
    软件工程概论通读第八章
    软件工程概论通读第七章
    软件工程概论通读第六章
    软件工程概论通读第五章
  • 原文地址:https://www.cnblogs.com/xwh-blogs/p/12794557.html
Copyright © 2011-2022 走看看