插入排序(经典)
思路分析
基本思想为:
把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素,排序过程中每次从无序表中取出一个元素,将它与有序表中元素依次比较,插入到适当位置,使之成为新的有序表。
代码实现
| 测试数据大小 |
花费时间(单位:毫秒) |
| 10000 |
22 |
| 50000 |
431 |
| 80000 |
1074 |
| 140000 |
3214 |
InsertSort
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| package com.yukinoshita.algorithm.sort;
import java.util.Arrays; import java.util.Random;
public class InsertSort { public static void main(String args[]) { int[] arr = {3, 9, -1, 10, -2};
System.out.println("排序前:" + Arrays.toString(arr)); insertSort(arr); System.out.println("排序后:" + Arrays.toString(arr));
testPerformance(); }
private static void insertSort(int[] arr) { for(int i=1;i<arr.length;i++) { int insertVal = arr[i]; int insertIndex = i-1; while(insertIndex>=0 && insertVal<arr[insertIndex]) { arr[insertIndex+1] = arr[insertIndex]; insertIndex--; } arr[insertIndex+1] = insertVal; } }
public static void testPerformance() { int size = 50000; int[] arr = new int[size]; Random random = new Random();
for (int i = 0; i < size; i++) { arr[i] = random.nextInt(100000); }
long startTime = System.currentTimeMillis(); insertSort(arr); long endTime = System.currentTimeMillis();
System.out.println("排序大小: " + size); System.out.println("排序时间: " + (endTime - startTime) + " 毫秒"); }
}
|