- 插入排序(Java)
- 1.概念
- 2.算法图解
- 3.代码
- 4.八万数据测试
2.算法图解插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。
3.代码把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
package DataStructures.Sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] arr = {101, 34, 119, 1};
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void insertSort(int[] arr) {
int insertIndex;
int insertVal;
//从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
for (int i = 1; i < arr.length; i++) {
//要插入的数据
insertVal = arr[i];
//从已经排序的序列最右边的开始比较,找到比其小的数
insertIndex = i;
while (insertIndex > 0 && insertVal < arr[insertIndex - 1]) {
arr[insertIndex] = arr[insertIndex - 1];
insertIndex--;
}
//存在比其小的数,插入
if (insertIndex != i) {
arr[insertIndex] = insertVal;
}
}
}
}
4.八万数据测试
public static void main(String[] args) {
// int[] arr = {101, 34, 119, 1};
// insertSort(arr);
// System.out.println(Arrays.toString(arr));
//80000数组测试
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random() * 8000000);//生成[0,8000000)的随机数
}
Date date1 = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(date1);
System.out.println("排序前时间是" + date1Str);
insertSort(arr);
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("排序后时间是" + date2Str);
}



