`
java_colonel
  • 浏览: 4615 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

java产生n个不同的随机数 进行排序 然后写入本地磁盘

阅读更多

声明一个大小为n的数组,里面放入0-(n-1)的数(不能重复),进行排序后放到本地磁盘

如果用冒泡排序,总共就是n-1的阶加次运算

 

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Random;

public class Test{
	 private static int [] t1=null;
                 Test(){};
                 Test(int n){
                       t1=new int[n];
                 }    
	//产生n个不同的随机数的方法
    private void getnum(){
    	/*
    	 * 创建一个Random对像r,r.nextInt()这个方法每次都会产生一个不同的数
    	 * 此处也可用int num=(int)( Math.random()*100) 的方法替代
    	 */
    	Random r=new Random(System.nanoTime());
    	int cycleFlag=0;//cycleFlag:用来控制产生不同的随机数
    	int a=0;//记录一共产生了多少个随机数
    	while(cycleFlag<t1.length){//循环产生随机但是不同的数
    		++a;
    		/*
    		 * tempNum:临时接收产生的随机数
    		 *         因为每次r.nextInt()都会得到不同的随机数,
    		 *         所以要用此变量接收,以便在后面使用
    		 * ifExistSecond:新产生的随机数是否已经在数组中存在,
    		 *         如果如果存在,则为1,不存在则为0
    		 */
    		int tempNum=0,ifExistSecond=0;
    		
    		tempNum=r.nextInt(t1.length);//接收新产生的随机数
    		/*
    		 * 判断是否是第一次产生随机数,如果是,
    		 * 则直接把这第一个数放到数组的头部
    		 */
    		if(cycleFlag==0){
				t1[cycleFlag]=tempNum;
				//System.out.println(tempNum);
				//System.out.println("cycleFlag:"+cycleFlag);
				++cycleFlag;//产生下一个随机数
			}else{
				/*
				 * 如果数组中已经有元素,则需要把产生的新随机数
				 * 与数组中的每个进行比较
				 */
				for(int m=0;m<cycleFlag;m++){
					if(tempNum==t1[m]){
						++ifExistSecond;
						continue;
					}
				}
				if(ifExistSecond==0){//如果新生的随机在数组中不存在,则添加到数组中
					//System.out.println(tempNum);
					t1[cycleFlag]=tempNum;
					//System.out.println("cycleFlag:"+cycleFlag);
					++cycleFlag;//产生下一个随机数
				}
			}
    	}
    	//System.out.println("a的值是:"+a);
    }
    
	//排序
    private void sort_(int [] arr){
    	int changeTimes=0;//记录一共产换了多少次
    	for(int i=0;i<arr.length-1;i++){
    		for (int j = 0; j < arr.length-i-1; j++) {
				if(arr[j]<arr[j+1]){
					++changeTimes;
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
    	}
    	//System.out.println("一共交换的次数:"+changeTimes);
    }
    
    //输出到磁盘
    private void writeTo(){
    	FileWriter writer=null;
    	try {
			writer = new FileWriter("e:/test.txt");
			for(int i=0;i<t1.length;i++){
				writer.write(t1[i]+" ");//这里不加" "的话,会出现乱码
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException ioe){
			ioe.printStackTrace();
		}
		finally{
			if(writer!=null){
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
    }
    
	public static void main(String[] args) {
		Test t=new Test(100);
		t.getnum();
		t.sort_(t1);
		t.writeTo();
	}
}

 

0
0
分享到:
评论
1 楼 Just_抱怨 2011-10-13  
工作一年不知道什么是冒泡排序,注释太多 看的眼花

相关推荐

    java 大文件 多字段排序

    - 内存排序:读取一个小文件到内存,使用Java的`Collections.sort()`或自定义比较器进行排序,然后写回至磁盘。 2. **多字段排序**: - 在Java中,可以使用`Comparator`接口来实现多字段排序。创建一个比较器,它...

    Java方法排序五百万数据

    在Java中实现外部排序,可以创建一个BufferedReader或Scanner来读取文件,每次读取一部分数据,然后用Java内置的排序函数对这部分数据进行排序。之后,将排序后的数据写入一个新的临时文件。重复这个过程,直到所有...

    java归并外排序

    Java归并外排序是一种在处理大量数据时,利用外部存储器进行排序的算法。当内存不足以容纳所有数据时,就需要借助硬盘等外部存储设备。这种排序算法通常由三个主要步骤组成:分块、内部排序和合并。 1. 分块:首先...

    java swing io 排序的几个小实例

    在Java Swing中,我们可以通过JFrame、JButton、JTable等组件来构建用户界面,同时,IO(输入/输出)操作则用于与外部文件系统进行交互,如读取、写入数据。排序则是数据处理中的常见需求,无论是对数组还是集合,都...

    外部归并排序Java实现

    - 对每个子序列进行内部排序,如使用快速排序、冒泡排序或插入排序,确保每个子序列内部都是有序的。 2. **合并阶段**: - 当所有子序列都已排序后,将它们合并成一个完整的有序序列。这个过程通常采用两两归并的...

    2020年唯品会-Java大数据开发工程师.pdf

    在 Spill 写入之前,会先进行二次排序,首先根据数据所属的 Partition 进行排序,然后每个 Partition 中的数据再按 Key 来排序。Partition 的目的是将记录划分到不同的 Reducer 上去,以期望能够达到负载均衡,以后...

    JAVA中文文档分句工具

    这一步可能涉及到数据持久化,即使用Java的文件I/O操作将数据写入磁盘,确保即使程序关闭,数据也不会丢失。这在大数据处理中尤其重要,因为结果可能非常庞大,不适合完全存储在内存中。 最后,该工具可以根据分句...

    java se 经典实例

    通过学习读取和写入文件,你可以了解如何与磁盘上的数据进行交互。比如,一个实例可能教你如何创建一个文本文件,并将用户输入的数据写入其中。 Java集合框架是另一个关键主题,包括ArrayList、LinkedList、HashMap...

    排序分割文件

    双路归并排序的基本思想是将大文件分解成若干小文件,分别对这些小文件进行排序,然后将排序好的小文件合并成一个完整的、有序的大文件。这个过程通常包括三个主要步骤:分割、排序和归并。 1. **分割**:首先,...

    sort_merge_java.rar_Table

    如果要处理的数据量超过了可用内存,可以考虑使用外部排序,即将数据写入磁盘并在磁盘和内存之间进行归并操作。 总的来说,这个"sort_merge_java.rar_Table"文件内容涉及到的IT知识点主要包括Java编程、数据结构...

    java操作redis所需jar包五个

    内含五个jar包!!!redis是一个key-value存储系统。和Memcached类似,它支持存储的...区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    电话号码去重的java实现,小工具你值得拥有

    这需要对Java的Main方法进行设计,并可能使用JAR打包工具将所有依赖打包成一个可执行的JAR文件。 5. **错误处理与测试**:为了确保程序的健壮性,需要添加适当的错误处理机制,比如处理文件不存在、无法读写等异常...

    Java Core - bookSystem

    在"Java Core - bookSystem"这个项目中,我们关注的是如何利用Java IO流进行文件的读写操作,以实现一个图书管理系统的功能,即增删改查(CRUD)。 IO流在Java中扮演着数据传输的角色,允许程序与外部资源(如文件...

    java电话簿地址簿

    在技术实现上,这个电话簿应用利用了Java的文件存储机制,将联系人的数据持久化到磁盘中。文件存储是一种常见的数据保存方法,它使得用户在关闭程序后仍能保留已输入的信息。Java中的`java.io`包提供了多种文件操作...

    Java通讯录

    同时,联系人列表可能按姓名或其他属性进行排序,这需要排序算法,如冒泡排序、快速排序或归并排序。 8. **测试与调试**:为了确保系统功能的稳定性和可靠性,开发者会进行单元测试和集成测试,使用JUnit等工具来...

    2021Java大厂面试题——大厂真题之唯品会-Java大数据开发工程师.pdf

    - 运行Combiner(如果配置),对写入磁盘的数据进行预处理,以减少磁盘I/O。 - 最终将多个Spill文件通过多路归并算法合并成一个文件。 - **Reduce端的Shuffle**: - 从Map端拷贝数据至Reduce端,每个Reducer只...

    java经典程序300例源代码16-19章

    Java的I/O流系统是其强大功能的一部分,允许程序读取和写入各种数据源,包括磁盘文件、网络连接甚至内存。这一章可能讲解了File类的使用,以及InputStream、OutputStream、Reader、Writer及其子类的使用方式,还有...

    java图像用户界面实现的通讯录程序

    在这个通讯录程序中,IO流用于读取和写入联系人数据到磁盘文件,例如电话簿的数据可能被保存为一个文本文件或XML文件。`FileInputStream`和`FileOutputStream`用于与文件系统交互,读取或写入数据。为了实现数据的...

    java的大数据读写

    "java的大数据读写"这个标题暗示了我们关注的重点是如何高效地处理大量数据,这通常涉及到内存管理、I/O操作以及可能的数据排序算法。描述中提到的小程序展示了如何读取和写入超过1GB的文件,这是大数据处理中的常见...

    java开源包4

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

Global site tag (gtag.js) - Google Analytics