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

来源:互联网 发布:soho程序员兼职平台 编辑:程序博客网 时间:2024/06/05 13:26
import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class test2 {public static void main(String[] args) {List<Integer> arrayList = new ArrayList();try {BufferedReader input = new BufferedReader(new FileReader("largeW.txt"));String temp = null;while ((temp = input.readLine()) != null) {arrayList.add(Integer.valueOf(temp.trim()));}//for (Iterator<Integer> iterator = arrayList.iterator(); iterator//.hasNext();) {//Integer object = iterator.next();//System.out.println(object);//}//冒泡排序算法调用//BubbleSort(arrayList);//归并算法调用Object[] tempArray = arrayList.toArray();int[] tempArrayInt = new int[tempArray.length];for (int i = 0; i < tempArrayInt.length; i++) {tempArrayInt[i] = Integer.parseInt(tempArray[i].toString());}tempArrayInt = mergeSort(tempArrayInt);for (int i = 0; i < tempArrayInt.length; i++) {System.out.println(tempArrayInt[i]);}//for (Iterator<Integer> iterator = arrayList.iterator(); iterator//.hasNext();) {//Integer object = iterator.next();//System.out.println(object);//}} catch (FileNotFoundException e) {System.out.println("文件不存在。");e.printStackTrace();} catch (NumberFormatException e) {System.out.println("类型不符错误。");e.printStackTrace();} catch (IOException e) {System.out.println("输入输出错误。");e.printStackTrace();}// System.out.println(Integer.valueOf((" 18940").trim()));}//**************冒泡排序法public static void BubbleSort(List list) {for (int i = list.size(); i != 0; i--) {for (int j = 0; j != i - 1; j++) {Integer tempa = (Integer) list.get(j);Integer tempb = (Integer) list.get(j + 1);int a = tempa.intValue();int b = tempb.intValue();// 交换位置部分if (a < b) {System.out.println(a);list.remove(j);list.add(j, tempb);list.remove(j + 1);list.add(j + 1, tempa);}}}}//**************归并排序法public static int[] mergeSort(int[] arr) {if (arr.length == 1) {return arr;}// 分半处理int half = arr.length / 2;int[] arr1 = new int[half];int[] arr2 = new int[arr.length - half];System.arraycopy(arr, 0, arr1, 0, arr1.length);System.arraycopy(arr, half, arr2, 0, arr2.length);// 递归部分arr1 = mergeSort(arr1);arr2 = mergeSort(arr2);return mergeSortSub(arr1, arr2);}//归并排序子程序public static int[] mergeSortSub(int[] arr1, int[] arr2) {int[] result = new int[arr1.length + arr2.length];int i = 0, j = 0, k = 0;while (true) {if (arr1[i] < arr2[j]) {result[k] = arr1[i];if (++i > arr1.length - 1) {break;}} else {result[k] = arr2[j];if (++j > arr2.length - 1) {break;}}k++;}for (; i < arr1.length; i++) {result[++k] = arr1[i];}for (; j < arr2.length; j++) {result[++k] = arr2[j];}return result;}}


使用冒泡排序法,我没有完整让它运行完毕,因为实在是太慢了。我尝试换成1K个数据,用了数分钟。


而下面是使用归并排序法,加上将所有数据输出,也只花了3秒不到时间。



真是算法拯救了人类。。

0 0
原创粉丝点击