第三周作业——冒泡排序和归并排序

package program;

import java.io.*;

public class Sorting {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		File file1 = new File("largeW.txt");
		File file2 = new File("largeW_bubble.txt");
		File file3 = new File("largeW_merge.txt");
		int number1[] = new int[1000000];
		int number2[] = new int[1000000];
		int number3[] = new int[1000000];
		
		//读取数据
		try {
			FileReader in = new FileReader(file1);
			BufferedReader bufr = new BufferedReader(in);
			String s = null;
			int i = 0;
			while((s = bufr.readLine()) != null) {
				number1[i] = Integer.valueOf(s).intValue();
				number2[i] = Integer.valueOf(s).intValue();
				//System.out.println("第"+i+"行:"+number1[i]);
				//System.out.println("第"+i+"行:"+number2[i]);
				i++;
			}
			bufr.close();
			in.close();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		
		//冒泡排序
		long starTime = System.currentTimeMillis();
		for(int m = 0; m < number1.length-1; m++) {
			for(int n = 0; n < number1.length-m-1; n++) {
				if(number1[n] > number1[n+1]) {
					int temp = number1[n+1];
					number1[n+1] = number1[n];
					number1[n] = temp;
				}
			}
		}
		long endTime = System.currentTimeMillis();
		long time = endTime - starTime;
		System.out.println("冒泡排序时间为:");
		System.out.println(time);
		/*
		System.out.println("冒泡排序的结果为:");
		for (int l = 0; l < number.length; l++){
			System.out.print(number1[l]+", ");
		}
		*/
		
		//写入冒泡排序数据
		try {
			FileWriter fw = new FileWriter(file2);
			BufferedWriter bufw = new BufferedWriter(fw);
			String S[]=new String[1000000];
			for(int a = 0; a < S.length; a++) {
				S[a] = Integer.toString(number1[a]);
			}
			for (int b = 0; b < S.length; b++) {
				bufw.write(S[b]);
				bufw.newLine();
			}
			bufw.close();
			fw.close();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		
		//归并排序
		starTime = System.currentTimeMillis();
		number2 = mergesort(number2, 0, number2.length - 1, number3);
		endTime = System.currentTimeMillis();
		time = endTime - starTime;
		System.out.println("归并排序时间为:");
		System.out.println(time);
		
		//System.out.println("归并排序的结果为:");
		//for (int f = 0; f < number2.length; f++){
		//	System.out.print(number2[f]+", ");
		//}
		
		
		//写入归并排序数据
		try {
			FileWriter fw = new FileWriter(file3);
			BufferedWriter bufw = new BufferedWriter(fw);
			String S[]=new String[1000000];
			for(int j = 0; j < S.length; j++) {
				S[j] = Integer.toString(number2[j]);
			}
			for (int k = 0; k < S.length; k++) {
				bufw.write(S[k]);
				bufw.newLine();
			}
			bufw.close();
			fw.close();
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		
		
	}

	private static int[] mergesort(int[] number2, int s, int t, int[] number3) {
		int m;
		int[] number4 = new int[t + 1];
		if (s == t)
			number3[s] = number2[s];
		else {
			m = (s + t) / 2;
			mergesort(number2, s, m, number4);
			mergesort(number2, m + 1, t, number4);
			merg(number4, s, m, t, number3);
		}
		return number3;
	}

	private static void merg(int[] number4, int l, int m, int n, int[] number3) {
		int i, j, k;
		i = l;
		j = m + 1;
		k = l;
		while (i <= m && j <= n) {
			if (number4[i] < number4[j])
				number3[k++] = number4[i++];
			else {
				number3[k++] = number4[j++];
			}
		}
		while (i <= m) {
			number3[k++] = number4[i++];
		}
		while (j <= n) {
			number3[k++] = number4[j++];
		}
	}
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值