java 实现算法导论书中的 快速排序 归并排序 插入排序
更新时间:2023-03-11 04:24:01 阅读量: 教育文库 文档下载
- java培训班推荐度:
- 相关推荐
package algorithm.echo; import java.io.FileReader; import java.io.*;
import java.util.Random; import java.util.Scanner;
public class FirstTest { //static int num; static String path=\
static String path1=\归并排序.txt\ static String path2=\快速排序.txt\ static String path3=\插入排序.txt\ static String path4=\归并排序1.txt\ static int Ar[]=new int[30005]; static int A []=new int[30005]; static int B []=new int[30005]; static int C []=new int[30005];
public static void qkWenben (String m)throws Exception { FileOutputStream testfile=new FileOutputStream(m); testfile.write(new String(\ } /* * 清空static数组 * */
public int[] qingkong(int q[]) { int b[]=new int[q.length]; for(int i=0;i * 将排好序的数组写入文本 * */ public static void WriterFuction(String m,int m1,int a[]) { for(int i=1;i<=m1;i++) { try { FileWriter fw=new FileWriter(m,true); BufferedWriter bw=new BufferedWriter(fw); bw.write(String.valueOf(a[i]));//写入文件是以字符串的形式输入的; bw.newLine(); bw.close(); fw.close(); } catch(IOException e) { e.printStackTrace(); } } } /* *RandomFuction函数 *实现随机产生任意num个1~m范围的数字, *并以String的格式存入文件当中 */ public static void RandomFuction(int m,int num) { int number; Random random=new Random(); for(int i=0;i * 将随机数从文件中读出来并存入数组当中; * */ public int[] Reader() { int count=1; File a=new File(path); try { BufferedReader br=new BufferedReader(new FileReader(a)); while(br.ready()) { String line=br.readLine(); int num1=Integer.parseInt(line); Ar[count]=num1; count++; } } catch(IOException e) { e.printStackTrace(); } return Ar; } /* * * 插入排序算法 * * */ public void InsertSort(int Ar1[],int n) { int key; int i,j; for(j=2;j<=n;j++) { i=j-1; key=Ar1[j]; while(i>0&&Ar1[i]>key) { Ar1[i+1]=Ar1[i]; i=i-1; } Ar1[i+1]=key; } } /* * 快速排序 * * */ public int partition(int Ar[],int p,int r) { int key; int x=Ar[r],j; int i=p-1; for(j=p;j<=r-1;j++) { if(Ar[j]<=x) { i=i+1; key=Ar[i]; Ar[i]=Ar[j]; Ar[j]=key; } } key=Ar[i+1]; Ar[i+1]=Ar[r]; Ar[r]=key; return i+1; } public void quicksort(int Ar[],int p,int r) { int q; if(p * 归并排序 * */ public void merge(int Ar[],int p,int q,int r) { int i,j,k,n1=q-p+1,n2=r-q; int L1[],R1[]; L1=new int[n1+2]; R1=new int[n2+2]; for(i=1;i<=n1;i++) { L1[i]=Ar[p+i-1]; } for(j=1;j<=n2;j++) { R1[j]=Ar[q+j]; } L1[n1+1]=100000;//因为生成的随即数是0-30000范围内的数据 R1[n2+1]=100000; i=1; j=1; for(k=p;k<=r;k++) { if(L1[i]<= R1[j]) { Ar[k]=L1[i]; i=i+1; } else { Ar[k]=R1[j]; j=j+1; } } } public void MergeSort(int Ar[],int p,int r) { int q; if(p { /* } /* * 把data[i..m]和data[m+1..j]归并 * 放到temp1[0..m-i]和temp2[0..j-m-1]中 * 归并到temp[0..j-i]中 * 然后复制到data[i..j]中 * * */ int[] temp1,temp2,temp; temp1=new int[m-i+1+1]; temp2=new int[j-m-1+1+1]; temp=new int[j-i+1]; for(int count=0;count temp1[count]=data[count+i]; } temp1[m-i+1]=100000; for(int count=0;count temp2[count]=data[count+m+1]; } temp2[j-m]=100000; int index1=0,index2=0; for(int count=0;count for(int count=0;count data[i+count]=temp[count]; } public static void mergeSort(int[] data, int i, int j) { if(i public static void main(String[] args) throws Exception { qkWenben(path); qkWenben(path1); qkWenben(path2); qkWenben(path3); long t1,t2; t1=System.currentTimeMillis(); int m,num,Sel; int p=1; int r,zero; FirstTest br=new FirstTest (); Scanner sac=new Scanner(System.in); System.out.println(\请输入要产生的随机数的个数(num):\ num=sac.nextInt(); System.out.println(\输入要产生的随机数的范围(0~m)上限m\ m=sac.nextInt(); RandomFuction(m,num); Ar=br.qingkong(Ar); Ar=br.Reader(); t2=System.currentTimeMillis(); System.out.println(\运行此程序所用的时间是\。\计算程序所用 r=num; do{ System.out.println(\请选择要进行的排序:\ System.out.println(\【1】归并排序\ System.out.println(\【2】快速排序\ System.out.println(\【3】插入排序\ Sel=sac.nextInt(); switch(Sel){ case 1: A=br.qingkong(A); 的时间 所用的时间 System.out.println(\【1】归并排序\ for(int e=1;e<=num;e++) { A[e]=Ar[e]; } t1=System.currentTimeMillis(); // A=br.Reader(); /* mergeSort(A,1,r/2); mergeSort(A,r/2+1,r); merge(A,1,r/2,r); */ br.MergeSort(A, 1, r); t2=System.currentTimeMillis(); System.out.println(\运行此程序所用的时间是\。\计算程序 WriterFuction(path1,num,A); /* for(int i=1;i<=num;i++) { System.out.println(A[i]); } */ break; case 2: B=br.qingkong(B); System.out.println(\【2】快速排序\ for(int e=1;e<=num;e++) { B[e]=Ar[e] ; } // B=br.Reader(); t1=System.currentTimeMillis(); br.quicksort(B, p, r); t2=System.currentTimeMillis(); WriterFuction(path2,num,B); /* for(int i=1;i<=num;i++) { System.out.println(B[i]); } } } */ System.out.println(\运行此程序所用的时间是\。\ break; case 3: C=br.qingkong(C); System.out.println(\【3】插入排序\ for(int e=1;e<=num;e++) { C[e]=Ar[e] ; } //C=br.Reader(); t1=System.currentTimeMillis(); br.InsertSort(C,num); t2=System.currentTimeMillis(); WriterFuction(path3,num,C); /* for(int i=1;i<=num;i++) { System.out.println(C[i]); } */ System.out.println(\运行此程序所用的时间是\。\ break; default : System.out.println(\输入的数据应在1~3之间!\ break; } System.out.println(\继续请输入0,否则输入其他字符结束!(1~3除外)\ zero=sac.nextInt(); }while(zero==0);
正在阅读:
java 实现算法导论书中的 快速排序 归并排序 插入排序03-11
主持人比赛演讲稿(共9篇)07-31
英语教学论教案 09-11
用FSL预处理DTI数据11-30
3Dmax2009教案.徐鑫03-28
填空题11-12
未来的社会作文400字5篇04-01
生命礼赞作文700字07-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 排序
- 归并
- 导论
- 算法
- 插入
- 快速
- 实现
- java
- 开题报告-陈美颖
- 高二生命科学复习提纲
- 江苏大学 金工实习答案
- 氦氖激光器的调试实验
- 2018年秋季高中政治教材必修1《经济生活》修改说明
- 科技工作者应有责任感 - 图文
- 评选优秀班主任事迹材料
- 司法所队伍建设存在的问题与对策
- 农村小学教职工队伍状况的调查研究
- 电路基础选择题100题
- 黄鹤楼 岳阳楼 滕王阁 鹳雀楼 中国古代四大名楼因何出名 - 图文
- 易控组态软件使用说明书
- 数控比赛刀具、量具清单
- 华为FusionCompute底层虚拟化安装向导
- 最好的七年级生物下学案Microsoft Word 97- 2003 Document(4)
- 省道二级公路改建工程施工组织设计湖南
- 2016年度黑龙江省科学技术奖授奖项目 - 图文
- 司法行政系统信息化建设的思考
- 考研政治思修法基经典习题-6
- 古代汉语期末考试试题加答案