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);
    	}
    }
    
    
  • 相关阅读:
    全网最新iOS面试题-大厂加薪篇
    iOS面试--虎牙最新iOS开发面试题
    iOS面试--字节跳动最新iOS开发面试题
    去面试腾讯iOS开发要达到咋样的水准?
    “iOS开发” 金三银四如何快速技术晋升?
    突破瓶颈,“iOS开发”,跳槽面试必备题(针对年后面试者)
    解决visio对象在word中显示不全的问题
    word中图片自动编号的交叉引用出现被引用的图片
    elasticsearch 一个分布式多用户能力的全文搜索引擎
    Maven仓库安装配置及使用
  • 原文地址:https://www.cnblogs.com/k-class/p/14018526.html
Copyright © 2011-2022 走看看