zoukankan      html  css  js  c++  java
  • 算法-java代码实现计数排序


    计数排序

     
     

    第10节 计数排序练习题

     

    对于一个int数组,请编写一个计数排序算法,对数组元素排序。

    给定一个int数组A及数组的大小n,请返回排序后的数组。

    测试样例:
    [1,2,3,5,2,3],6
    [1,2,2,3,3,5]
     
     
    1
    import java.util.*;
    2
    
    
    3
    public class CountingSort {
    4
        public int[] countingSort(int[] A, int n) {
    5
            countingSort(A);
    6
            return A;
    7
        }
    8
    
    
    9
        public void countingSort(int[] arr) {
    10
            int[] tempArr = new int[arr.length];// 临时数组
    11
            int[] timesArr;// 统计每个元素出现的次数,放入到对应的桶中
    12
            int range;// 统计这一组的范围,得出需要多少个桶
    13
            int max = arr[0];
    14
            int min = arr[0];
    15
            for (int a : arr) {
    16
                if (a > max)
    17
                    max = a;
    18
                if (a < min)
    19
                    min = a;
    20
            }
    21
            range = max - min + 1;// 得出极值差,为了减小临时数组(统计各元素出现的次数)的长度
    22
            timesArr = new int[range];
    23
    
    
    24
            for (int i = 0; i < arr.length; i++) {
    25
                timesArr[arr[i] - min]++;
    26
            }
    27
            for (int i = 1; i < timesArr.length; i++) {// 得到所有元素的大小上的总体顺序
    28
                timesArr[i] += timesArr[i - 1];
    29
            }
    30
            for (int i = 0; i < arr.length; i++) {// 将arr中元素的位置顺序对应到临时数组中
    31
                int position = timesArr[arr[i] - min];// 得到arr[i]这个元素在整体上的位置
    32
                tempArr[--position] = arr[i];// 根据上面的位置,将该元素放入到临时数组中
    33
                timesArr[arr[i] - min]--;
    34
            }
    35
            for (int i = 0; i < arr.length; i++) {
    36
                arr[i] = tempArr[i];
    37
            }
    38
        }
    39
    }
     
     
    您的代码已保存
    答案正确:恭喜!您提交的程序通过了所有的测试用例
     
  • 相关阅读:
    团队作业 总结
    个人作业 Alpha项目测试
    第二次作业
    交互式多媒体图书平台的设计与实现
    基于VS Code的C++语言的构建调试环境搭建指南
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习
    如何测评一个软件工程师的计算机网络知识水平和编程能力
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
  • 原文地址:https://www.cnblogs.com/haozhengfei/p/6b62e30ef3b88aa8e75b58ca7ca1a82e.html
Copyright © 2011-2022 走看看