zoukankan      html  css  js  c++  java
  • 数据结构——计数排序

    系列文章:数据结构与算法系列——从菜鸟到入门

    简述

    计数排序基于桶排序。

    比如待排数组 A[5]={101, 100, 103, 102, 105}; 那么就需要建造 105(max)-100(min)+1=6 大小的临时数组,将这 5 个元素按照,值减 100(min) 作为下标存储在临时数组中。如下图所示:

    源码实现

    /**
     * 计数排序
     * @param A
     * @param n
     */
    private static void jiShu(int[] A, int n) {
        // 找出数组中的最大与最小值
        int min = A[0];
        int max = A[0];
        for (int i = 0;i < n;i++) {
            if (A[i] < min) {
                min = A[i];
            }
            if (A[i] > max) {
                max = A[i];
            }
        }
        // 将数据装入桶中,每个桶的值代表该下标值在数组中出现的次数
        int[] bucket = new int[max - min + 1]; // 建桶
        for (int i = 0;i < n;i++) {
            bucket[A[i]-min]++;
        }
        // 将桶倒出至原数组中
        int index = 0;
        for (int i = 0;i < bucket.length;i++) {
            for (int j = 0;j < bucket[i];j++) {
                A[index++] = i+min;
            }
        }
    }

    实现方式与算法导论中不一样,算法导论中的方法还没领悟= =,以后更新。

  • 相关阅读:
    交互式监控工具glances
    性能测试工具Locust
    CentOS 7 安装 PostgreSQL 教程
    Vue表单
    Vue事件处理
    Vue列表渲染
    Vue条件渲染
    Vue中class与style绑定
    GIT命令操作
    Git简介
  • 原文地址:https://www.cnblogs.com/zhengbin/p/6561030.html
Copyright © 2011-2022 走看看