package com.ffyc.util.arraysortspeedtest;
import com.ffyc.util.ArraySort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class InsertSortSpeedTest {
public static void main(String[] args) {
//声明一个长度为80000的数组
int [] arr = new int[80000];
//给数组中赋上随机值
for (int i = 0; i < 80000; i++) {
arr[i] = (int)(Math.random()*8000000);
}
//创建一个当前时间的Date对象
Date date1 = new Date();
//创建一个SimpleDateFormat类型的对象用来格式化当前的时间的Date对象
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(date1);
System.out.println("排序前的时间为: "+ date1Str);
//调用我们的插入排序算法
ArraySort.insertSort(arr);
//创建一个排序后时间的Date对象
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("排序后的时间为: " + date2Str);
System.out.println(Arrays.toString(arr));
}
}
我们在插入排序中一旦从后往前在有序表中找到比待插入元素大的值,那么该有序表中的对应大的值就要后移,这里我们每当执行一次后移操作就会进行一次赋值操作,并且如果遇到完全逆序的情况这个时候每一次的待排序元素都要和前面的有序表中的所有的元素进行交换位置
而选择排序中每次都是找最小值,都要将数组遍历一次,但是在选择排序中交换时整体发生在内层for循环之外的, 在内层for循环之中只是进行了修改,而对于插入排序则是在内层for循环中进行了数组元素的移动,我们认为数组赋值的速度比变量赋值的速度要慢,所以我们认为在完全逆序(或者说数组混乱度比较大)的情况下我们的插入排序的速度是比选择排序的速度要慢的