数据结构与算法-引论-练习1.1

来源:互联网 发布:php兼职 编辑:程序博客网 时间:2024/06/16 14:31

1.1 编写一个程序解决选择问题。令k = N/2。画出表格显示程序对于N种不同的值的运行时间。

  • 创建随机数据代码
package unit1;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.Random;public class CreateData {    public static void main(String[] args) throws IOException {        int n = 10000;        Random random = new Random();        int[] datas = new int[n];        for (int i=0; i<n; i++) {            datas[i] = random.nextInt(10000000);        }        File file = new File("e:/data.dat");        FileWriter fw = new FileWriter(file);        BufferedWriter bw = new BufferedWriter(fw);        for (int i =0; i<n; i++) {            String temp = Integer.toString(datas[i])+" ";            bw.write(temp);        }        bw.flush();        bw.close();    }}
  • 排序算法代码
package unit1;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.util.Arrays;public class Work01 {    public static void main(String[] args) throws IOException {        long startTime = System.currentTimeMillis();        File file = new File("e:/data.dat");        FileReader fr = new FileReader(file);        BufferedReader br = new BufferedReader(fr);        StringBuffer sb = new StringBuffer();        int content = 0;        while ((content = br.read()) != -1) {            sb.append((char)content);        }        String str = sb.toString();        String[] strs = str.split(" ");        int n = strs.length;        int[] datas = new int[n];        for (int i=0 ; i<n; i++) {            datas[i] = Integer.parseInt(strs[i]);        }        bubbleSort(datas);        long time = System.currentTimeMillis()-startTime;        System.out.println(time+" ms");    }    public static void bubbleSort(int[] arr) {        for (int i=0; i<arr.length-1; i++) {            for (int j = 0; j < arr.length-1-i; j++) {                if (arr[j] > arr[j+1]) {                    int temp = arr[j];                    arr[j] = arr[j+1];                    arr[j+1] = temp;                }            }        }    }}

测试5种数据的速度,分别是1万,2万,5万,10万, 20万
分别测3次的时间,再取平均时间。

数据量 1st时间 2nd时间 3rd时间 Avg时间 1万 129ms 131ms 132ms 131ms 2万 482ms 486ms 487ms 485ms 5万 3145ms 3122ms 3140ms 3.1s 10万 12.6s 12.6s 12.6s 12.6s 20万 50.2s 50.4s 50s 50.2s

可以观察到很明显的平方关系在其中,每当排序量倍数增长,所消耗的时间将会是倍数的平方。

0 0
原创粉丝点击