`

记录《编程珠玑》中通过位开关来实现排序的方法

 
阅读更多

程序实现自动生成1000万个从1000万到1亿之间的随机数写入到文件中,然后对这些数进行从小到大排序写入到新的文件中。

核心思想:用一个很大的数组来记录随机数出现的次数,然后直接输出这个基数器的序号即为排序结果。

	private static final int SIZE = 10000000;//随机数数量
	private static final int START = 10000000;//随机数开始值
	private static final int END = 89999999;//随机数增量
	
	private static final String DIR = "e:/test/";

	public static void main(String[] args) throws Exception{
		long time  = System.currentTimeMillis();
		createTestData();
		System.out.println("耗时:"+(System.currentTimeMillis() - time));
		time  = System.currentTimeMillis();
		sort();
		System.out.println("耗时:"+(System.currentTimeMillis() - time));
		System.out.println("完成!");
	}
	
	private static void sort()throws Exception{
		System.out.println("初始化排序数组...");
		int[] record = new int[END+1];
		for(int i = 0;i<record.length;i++){
			record[i] = 0;
		}
		File file = new File(DIR+"test.txt");
		BufferedReader br = new BufferedReader(new FileReader(file));
		String line;
		while((line = br.readLine())!=null){
			record[Integer.parseInt(line) - START] += 1; 
		}
		br.close();
		
		System.out.println("正在排序...");
		File file2 = new File(DIR+"test-result.txt");
		if(!file.exists()){
			file.createNewFile();
		}
		BufferedWriter bw = new BufferedWriter(new FileWriter(file2,true));
		int i = START;
		for(int r : record){
			if(r>=1){
				for(int j = r;j>0;j--){
					bw.write(i+(r>1?" <---":""));
					bw.newLine();
				}
			}
			i++;
			//System.out.println("i="+i);
		}
		bw.close();
	}
	
	private static void createTestData()throws Exception{
		Random r = new Random();
		File file = new File(DIR+"test.txt");
		if(!file.exists()){
			file.createNewFile();
		}
		System.out.println("正在生成随机数...");
		BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));
		for(int i = 0;i<SIZE;i++){
			bw.write(START+r.nextInt(END)+"");
			bw.newLine();
			//System.out.println("i="+i);
		}
		bw.close();
	}


分享到:
评论

相关推荐

    编程珠玑 编程珠玑 编程珠玑 编程

    这些问题的解决方法不仅提升了程序的运行效率,还揭示了编程中的设计原则和思考方式。 另一个重要主题是程序性能的优化。《编程珠玑》强调,优化不仅仅是关于速度,而是关于理解代码的运作方式和它对系统资源的影响...

    编程珠玑源码下载编程珠玑书后源代码

    源代码的学习对于理解书中的概念至关重要,因为它们提供了实际操作的例子,读者可以通过阅读和分析这些代码来提升自己的编程技巧和解决问题的能力。 书中涉及的知识点包括但不限于: 1. **数据结构**:书中深入...

    编程珠玑 第2版(修订版)_编程珠玑修订_资料_

    6. **程序性能分析**:学习如何通过分析工具和方法来评估程序性能,识别瓶颈,并进行针对性的优化。 7. **代码质量和可读性**:强调编写清晰、简洁、易于理解的代码,提倡良好的编程习惯和风格,以提高团队协作效率...

    编程珠玑(第二版)答案

    根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...

    编程珠玑 编程珠玑续

    在《编程珠玑》中,作者Jon Bentley将编程问题比喻为“珍珠”,强调解决这些问题的过程如同寻找珍贵的珍珠,需要深思熟虑和精心打磨。书中的主要知识点包括: 1. **问题解决策略**:如何分析问题,确定合适的算法,...

    编程珠玑源代码

    在《编程珠玑》的源代码中,我们可以找到书中各个章节讨论的算法实例,如排序、搜索、数据压缩等经典问题的解决方案。这些源代码提供了动手实践的机会,帮助读者更好地理解和应用所学知识。 1. **排序算法**:书中...

    《编程珠玑》部分源代码Java实现

    3. **其他算法与数据结构**:除了上述内容,源代码可能还涵盖了其他经典的算法和数据结构,比如快速排序、堆排序、哈希表、二叉搜索树等,这些都是解决编程珠玑中问题的常见工具。 学习这些源代码,你不仅可以掌握...

    编程珠玑(PDF带目录)

    书中对算法的探讨并不止于基础,它还深入到高级数据结构,如堆、树、图等,并通过这些结构来实现更复杂的数据操作。这不仅是对数据结构的深入学习,也是对编程思维的锻炼,因为正确选择数据结构对于解决编程问题至关...

    编程珠玑(续)

    《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,...

    编程珠玑高清pdf版.pdf

    总的来说,《编程珠玑》这本书涵盖了编程实践中遇到的诸多问题,包括但不限于数据结构、算法、输入/输出优化等,通过实例解析,使读者能够掌握如何优雅地解决编程挑战。配合压缩包中的其他资源,读者不仅可以深入...

    编程珠玑之位图排序

    如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,...

    编程珠玑pdf+源代码

    1. **排序与搜索算法**:《编程珠玑》详细讲解了各种排序算法,如插入排序、选择排序、快速排序、归并排序以及堆排序,以及它们的性能分析。同时,书中也涉及到了查找算法,如二分查找和哈希表的应用,这些都是面试...

    编程珠玑总结笔记

    本资源笔记总结了编程珠玑中的一些重要知识点,包括优化程序、埃氏筛法和位图法等。 1. 打印出小于 10000 的素数 优化程序是编程珠玑中的一大主题,如何优化程序来提高效率是一个非常重要的问题。在这篇笔记中,...

    编程珠玑中文 第二版 非扫描版

    在《编程珠玑》中,你将学习到如何处理大量数据,如何设计高效的输入/输出策略,以及如何利用空间和时间复杂度的权衡来优化程序。这些问题在大数据处理、云计算和现代软件工程中都是至关重要的。书中还讨论了如何...

    编程珠玑(经典)

    例如,书中阐述了如何在有限的内存条件下处理大规模数据,通过空间换时间的策略实现高效的查找和排序。 在算法分析上,作者强调了理解算法复杂度的重要性。书中通过实例解释了时间复杂度和空间复杂度的概念,帮助...

    编程珠玑.pdf

    2.1 Awk中的关联数组 13 2.2 有穷状态机模拟器 16 2.3 拓扑排序 17 2.4 原理 20 2.5 习题 21 2.6 深入阅读 22 第3章 程序员的忏悔 23 3.1 二分搜索 24 3.2 选择算法 26 3.3 子程序库 28 3.4 原理 30 3.5 习题 31 第4...

    编程珠玑源码

    通过对"ProgramPeals"中的源码进行学习和分析,读者不仅可以深化对《编程珠玑》书中理论的理解,还能提升自己的编程技能,学会如何在实际项目中运用这些理论知识,解决实际问题。同时,这也是一种很好的自我训练和...

    《编程珠玑》第2版中文PDF+源代码

    《编程珠玑》是计算机科学领域的一本经典著作,作者是Jon Bentley,他在书中通过一系列有趣的问题和解决方案,深入浅出地探讨了程序设计的艺术和技巧。这本书的第二版中文PDF和源代码的提供,为中国的程序员和计算机...

    编程珠玑续本

    编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本

Global site tag (gtag.js) - Google Analytics