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