冒泡排序运行的时间和归并排序运行时间的比较
来源:互联网 发布:怎么复制淘宝宝贝详情 编辑:程序博客网 时间:2024/05/17 20:30
下面是一万个随机数据采用冒泡排序所用的时间(由于老师给的一百万个数据太大,我在等了半小时后没有结果,),具体代码如下;
冒泡排序:
package three.suanfa.whp;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;public class bubbleSort {/** * @王海平 */public static void main(String[] args) {// TODO 自动生成的方法存根double start_all = System.currentTimeMillis();String path = "txt/largeW.txt";ArrayList<Integer> list = read(path);int temp;double start = System.currentTimeMillis();for (int i = 0; i < list.size(); i++) {for (int j = i; j < list.size(); j++) {if (list.get(i) > list.get(j)) {temp = list.get(i);list.set(i, list.get(j));list.set(j, temp);}}}double end = System.currentTimeMillis();System.out.println("冒泡排序时间为: " + (end - start)+"毫秒");// 写入txt文件write(list);System.out.println("写入完成");double end_all = System.currentTimeMillis();System.out.println("总运行时间为: " + (end_all - start_all)+"毫秒");}//创建并写入largeW_bubble.txt文件public static void write(ArrayList list) {File f = new File("txt/largeW_bubble.txt");FileOutputStream fou = null;try {fou = new FileOutputStream(f, true);// true,设置可追加for (int i = 0; i < list.size(); i++) {String s = list.get(i).toString();String a = "" + s + "\t\n";// byte []bytes=new byte[1024];// 如何把string转换byte数组fou.write(a.getBytes());}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {try {fou.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//读取文件到Arraylist 数组public static ArrayList read(String path) {ArrayList<Integer> list = new ArrayList<Integer>();BufferedReader input = null;try {FileReader in = new FileReader(path);input = new BufferedReader(in);String ss;try {while ((ss = input.readLine()) != null) {String[] s = ss.split("\r\n");for (int i = 0; i < s.length; i++) {list.add(Integer.parseInt(s[i].trim())); // 将String s中的内容添加到动态数组中}}} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}in.close();input.close();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();}return list;}}
运行结果:
归并排序:
package three.suanfa.whp;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;public class mergeSort {/** * @王海平 */public static void main(String[] args) {// TODO 自动生成的方法存根double start_all = System.currentTimeMillis();String path = "txt/largeW.txt";ArrayList<Integer> list=read(path); double start = System.currentTimeMillis();mergeSort(list);double end = System.currentTimeMillis();System.out.println("归并排序时间为: " + (end - start)+"毫秒");// 写入txt文件write(list);System.out.println("写入完成");double end_all = System.currentTimeMillis();System.out.println("总运行时间为: " + (end_all - start_all)+"毫秒");}//创建并写入largeW_merge.txt文件public static void write(ArrayList<Integer> list) {File f = new File("txt/largeW_merge.txt");FileOutputStream fou = null;try {fou = new FileOutputStream(f, true);// true,设置可追加for (int i = 0; i < list.size(); i++) {String s = String.valueOf(list.get(i));String a = "" + s + "\t\n";// byte []bytes=new byte[1024];// 如何把string转换byte数组fou.write(a.getBytes());}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {try {fou.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//归并排序public static void mergeSort(ArrayList<Integer> data) { sort(data, 0, data.size() - 1); } public static void sort(ArrayList<Integer> data, int left, int right) { if (left >= right) return; // 找出中间索引 int center = (left + right) / 2; // 对左边数组进行递归 sort(data, left, center); // 对右边数组进行递归 sort(data, center + 1, right); // 合并 merge(data, left, center, right); } public static void merge(ArrayList<Integer> data, int left, int center, int right) { // 临时数组 int[] tmpArr = new int[data.size()]; // 右数组第一个元素索引 int mid = center + 1; // third 记录临时数组的索引 int third = left; // 缓存左数组第一个元素的索引 int tmp = left; while (left <= center && mid <= right) { // 从两个数组中取出最小的放入临时数组 if (data.get(left) <= data.get(mid)) { tmpArr[third++] = data.get(left++); } else { tmpArr[third++] = data.get(mid++); } } // 剩余部分依次放入临时数组(实际上两个while只会执行其中一个) while (mid <= right) { tmpArr[third++] = data.get(mid++); } while (left <= center) { tmpArr[third++] = data.get(left++); } // 将临时数组中的内容拷贝回原数组中 // (原left-right范围的内容被复制回原数组) while (tmp <= right) { data.set(tmp, tmpArr[tmp++]); } } //读取文件到int数组public static ArrayList read(String path) {ArrayList<Integer> list = new ArrayList<Integer>();BufferedReader input = null;try {FileReader in = new FileReader(path);input = new BufferedReader(in);String ss;try {while ((ss = input.readLine()) != null) {String[] s = ss.split("\r\n");for (int i = 0; i < s.length; i++) {list.add(Integer.parseInt(s[i].trim())); // 将String s中的内容添加到动态数组中}}} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}in.close();input.close();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();}return list;}}
运行结果:
排序结果一样:
总结:从上面的排序时间来说,归并排序的时间明显比冒泡排序用的时间少!经查资料(数据结构)得知,归并排序是一种比较稳定的排序方法!
总的时间代价是O(nlog2n),而冒泡排序的时间是O(n的二次方)
0 0
- 冒泡排序运行的时间和归并排序运行时间的比较
- 选择、冒泡、快速、归并、插入排序算法的运行时间比较
- 关于归并排序运行时间的证明
- 堆排序的最坏运行时间和最优运行时间
- 体验复杂度 2种排序方法的运行时间比较
- 两种排序算法的运行时间
- 各种排序的运行时间对比
- 【C++】各种排序运行时间的测试
- 几种排序算法运行时间比较
- C++计算运行时间和随机数的插入排序
- 冒泡排序和快速排序耗时比较(时间复杂度的理想与现实)
- 冒泡排序的时间复杂度
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- 算法运行时间的比较
- 第三周作业——冒泡排序和归并排序(运行冒泡排序)
- 冒泡排序,快速排序,插入排序以及二叉树查找的O级时间的比较
- 第二周项目3 体验复杂度(比较两种排序算法的运行时间)
- 归并排序和快速排序的比较
- Algirdas Avizienis提出的高可信系统(High-confidence Systems)概念模型
- PHP5.5在windows 安装使用 memcached 服务端的方法以及 php_memcache.dll 下载
- shell 文本过滤
- 用VS调试dump的几个问题
- Linux中profile、bashrc、bash_profile之间的区别和联系
- 冒泡排序运行的时间和归并排序运行时间的比较
- 如何使用VS2010分析.net dump
- srand函数
- opencv2 如何获取像素值
- html5学习网站
- BO与BOSS对接配置
- Java编程语言跨平台的原理 之个人理解
- JavaScript编码相关
- log4net配置