记录《编程珠玑》中通过位开关来实现排序的方法
2014-03-18 18:31
281 查看
程序实现自动生成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(); }
相关文章推荐
- 利用sql2005的新特性实现根据子表条件得到的主表键且按其排序取出对应主子表记录的方法
- 记录android点滴(一)--通过build.prop实现产品定制的方法
- 记录android点滴(一)--通过build.prop实现产品定制的方法
- 利用sql2005的新特性实现根据子表条件得到的主表键且按其排序取出对应主表记录的方法
- 通过SQL语句实现记录的重复次数排序
- 排列搜索 庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)
- PHP通过PHPMailer类库实现QQ邮箱发送方法
- loction.search 通过地址栏实现页面之间的数据传输、接受、展示、处理方法
- 错误记录 两种实现方法
- 从头认识Spring-3.1 简单的AOP日志实现-某方法之前的前后记录日志
- Java实现几种常见排序方法
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 实现冒泡排序。(排序整形数组)。使用数组和指针两种方法。
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- Qt中解决 QLabel 点击事件通过qss+focuspolicy方法实现
- PHP通过table标签实现输出EXCEL的方法
- 求助哇, 我这里有一个存储过程 我想实现排序 通过判断然后 在排序 大家 请看下面的存储过程
- angular.js实现列表orderby排序的方法
- 通过函数实现删除通话记录
- python实现忽略大小写对字符串列表排序的方法