排序算法---------计数排序

本文介绍了一种简单直观的排序算法——计数排序,并通过Java实现进行详细解析。计数排序适用于一定范围内的整数排序,通过构建一个额外的数组来统计每个数值出现的次数,再根据这些统计数据重构排序后的数组。
/**
 * 计数排序
 * 构建一个数组,存放从0到最大值中每个数的个数,然后依次遍历数据,将数据取出来。
 * @author Administrator
 *
 */

public class CountSort {

    public static void main(String[] args) {

        int[] arr = {1,2,3,1,2,34,5,6,3,3};
        int gap = getGap(arr);
        int[] countSort = countSort(arr,gap);
        for (int i : countSort) {
            System.out.print(i+"  ");

        }

    }
    /**
     * 
     * @param arr 需要排序的数组
     * @param gap 最大值和最小值之差,表示可能的元素个数
     */
    public static int[] countSort(int[] arr,int gap) {
        //创建一个数组
        int[] count = new int[gap+1];//计数
        int length = arr.length;
        int sum = 0;//获取A数组大小用于构造B数组  
        int[] B = new int[length];//构造B数组

        for(int i=0;i<length;i++)
        {
            count[arr[i]] += 1;// 统计A中各元素个数,存入count数组
        }
        for(int i=0;i<=gap;i++)//修改C数组
        {
            sum+=count[i];
            count[i]=sum;    
        }
        for(int i=length-1;i>=0;i--)//遍历arr数组,构造B数组
        {
            B[count[arr[i]]-1]=arr[i];//将A中该元素放到排序后数组B中指定的位置
            count[arr[i]]--;//将C中该元素-1,方便存放下一个同样大小的元素
        }
        return B;//将排序好的数组返回,完成排序
    }
    public static int getGap(int[] arr) {
        if(arr==null||arr.length==0) {
            return -1;
        }
        int max = arr[0];
        for(int i=1;i<arr.length;i++) {
            if (max<arr[i]) {
                max = arr[i];
            }
        }
        return max ;
    }

}
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值