【Java语言程序设计(基础篇)第10版 练习题答案】Practice_9_6

(秒表)设计一个名为 StopWatch 的类,该类包含:

  • 具有访问器的私有数据域 startTime 和 endTime。
  • 一个无参构造方法,使用当前时间来初始化 startTime。
  • 一个名为 start() 的方法,将 startTime 重设为当前时间。
  • 一个名为 stop() 的方法,将 endTime 设置为当前时间。
  • 一个名为 getElapsedTime() 的方法,以毫秒为单位返回秒表记录的流逝时间。
    画出该类的 UML 图并实现这个类。编写一个测试程序,用于测量使用选择排序对 100 000 个数字进行排序的执行时间。
import java.util.Date;
import java.util.Random;

public class Practice_9_6 {

	public static void main(String[] args) {

		final int NUM = 100000;
		
		int[] number = new int[NUM];
		Random random = new Random();
		
		for (int i = 0; i < NUM; i++)
			number[i] = random.nextInt(100000);
		
		StopWatch stopWatch = new StopWatch();
		sort(number, 0, NUM - 1);
		stopWatch.stop();
		
		System.out.println(stopWatch.getElapsedTime() + "ms");
		
	}
	
	//将数组第一个数作为中间数,放到数组中正确的位置,并返回其位置
	public static int mid(int[] a,int low,int high) {
		int middle = a[low];
		
		while (low < high) {
			for (; low < high; high--) {
				if (middle > a[high]) {
					a[low] = a[high];
					low++;
					break;
				}
			}
			
			for (; low < high; low++) {
				if (a[low] > middle) {
					a[high] = a[low];
					high--;
					break;
				}
			} 
		}
		
		a[low] = middle;
		
		return low;
	}
	
	//将数组分成两份。递归。
	public static void sort(int[] a, int low, int high) {
		
		if (low >= high)
			return;
		
		int middle;
		
		middle = mid(a, low, high);
		
		sort(a, low, middle - 1);
		sort(a, middle + 1, high);
		
	}

}

class StopWatch {
	
	private Date startTime;
	private Date endTime;
	
	public StopWatch() {
		startTime = new Date();
	}
	
	public void start() {
		startTime = new Date();
	}
	
	public void stop() {
		endTime = new Date();
	}
	
	public long getElapsedTime() {
		return endTime.getTime() - startTime.getTime();
	}

	public Date getStartTime() {
		return startTime;
	}

	public Date getEndTime() {
		return endTime;
	}
	
}

输出结果为:

21ms

(输出结果不一定是一样的,根据数组的杂乱程度和电脑性能而定)
(程序若有问题或者建议希望在评论处提,因为我是个初学者,想有所提高)

你可能感兴趣的:(语言)