zoukankan      html  css  js  c++  java
  • 计数排序_数组与集合时间比较

    计数排序_数组与集合时间比较

    Integer []与ArrayList比较

    package com.m.demo;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class Test1 {
    	public static void main(String[] args) {
    		List<Integer> list = new ArrayList<Integer>();
    		Random random = new Random();
    		Test2 test2 = new Test2();
    		int n = 15000;
    		Integer [] arr = new Integer [n];
    		for (int i = 0; i < n; i++) {
    			//10~20
    			list.add(random.nextInt(11)+10);
    			arr[i] = list.get(i);
    		}
    		
    		
    		long startTime = System.currentTimeMillis();
    		test2.countSort(list);
    		long endTime = System.currentTimeMillis();
    		System.out.println("ArrayList:"+(endTime-startTime));
    		
    		startTime = System.currentTimeMillis();
    		sort(arr);
    		endTime = System.currentTimeMillis();
    		System.out.println("数组:"+(endTime-startTime));
    		/*
    		    List:9
    			数组:4
    		 */
    		
    	}
    	
        public static int[] sort(Integer[] is) {
            //1.寻找最大值,来寻找新开辟空间的上限
            int max = is[0];
            for (int i = 1; i < is.length; i++) {
                if (is[i] > max) {
                    max = is[i];
                }
            }
            //2.根据最大值创建空间
            int[] count = new int[max + 1];
            //3.遍历数组,统计各个元素的个数
            for (int i = 0; i < is.length; i++) {
                count[is[i]]++;//找到对应的位置,计数+1
            }
            //4.遍历统计后的数据,输出结果
            int index = 0;
            int[] sorted = new int[is.length];
            for (int i = 0; i < count.length; i++) {
                //每个计数要往排序后的数组放若干次
                for (int j = 0; j < count[i]; j++) {
                    sorted[index++] = i;
                }
            }
            return sorted;
        }
    }
    
    
    ArrayList:9
    数组:4
    

    LinkedList与Integer []比较

    LinkedList:267
    数组:4
    

    List计数代码

    package com.m.demo;
    
    import java.util.List;
    
    public class Test2 {
    	
    	public void countSort(List<Integer> list){
    		//1、找最大值
    		Integer max = 0;
    		for(Integer i:list) {
    			if(max<i) {
    				max = i;
    			}
    		}
    		//2、创建排序数组
    		int count [] = new int [max+1];
    		for (int i = 0; i < list.size(); i++) {
    			int j = list.get(i);
    			count[j]++;
    		}
    		
    		list.clear();
    		for (int i = 0; i < count.length; i++) {
    			for (int j = 0; j < count[i]; j++) {
    				list.add(i);
    			}
    		}
    	}
    	/**
    	 * 交换list中的a与b
    	 * @param list
    	 * @param a
    	 * @param b
    	 */
    	private void swap(List<Integer> list,int a,int b) {
    		int temp = list.get(a);
    		list.set(a, list.get(b));
    		list.set(b, temp);
    	}
    }
    
    
  • 相关阅读:
    asp.net 浏览器下载文件的四种方式
    微信网页认证asp.net core返回MP_verify_CuUky7CS6gvKrMSe.txt
    qrcode length overflow (1632>1056)qrcode.js使用过程中二维码长度溢出解决办法
    layui的文档位置
    在64位Win2008 Server 系统上部署SSIS包遇到的问题及解决办法
    SQL SERVER 2008 中收缩数据库日志
    Reporting Service 按需隐藏导出类型
    SQL语句统计数据库中数据 有心人
    NC27 集合的所有子集(一)
    java虚拟机
  • 原文地址:https://www.cnblogs.com/k-class/p/14018526.html
Copyright © 2011-2022 走看看