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

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万129ms131ms132ms131ms
2万482ms486ms487ms485ms
5万3145ms3122ms3140ms3.1s
10万12.6s12.6s12.6s12.6s
20万50.2s50.4s50s50.2s

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值