简单插入排序
插入排序法介绍
插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
插入排序法思想
- 把 n 个待排序的元素看成为一个有序表和一个无序表,
- 一开始时有序表中只包含一个元素(arr[0]),无序表中包含有 n-1 个元素(arr[1]~arr[n])
- 排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
插入排序思路图
代码实现
1. public class insertsort { 2. public static void main(String[] args) { 3. int[] arr = {3, 9, -1, 10, -2}; 4. System.out.println("原数组为:" + Arrays.toString(arr)); 5. insertSort(arr); 6. System.out.println("排序后数组为:" + Arrays.toString(arr)); 7. } 8. 9. private static void insertSort(int[] arr) { 10. for (int i = 1; i < arr.length; i++) {//最开始唯一一个数(arr[0])就是有序的,故插入操作:i从1开始 11. int insertVal = arr[i];//定义待插入的数 12. int insertIndex = i - 1;// 即 arr[i]的前面这个数的下标(“有序数组”的最后一个) 13. // 给 insertVal 找到插入的位置 14. /* 说明: 15. 1. insertIndex >= 0 保证在给 insertVal 找插入位置,不越界 16. 2. insertVal < arr[insertIndex] 说明待插入的数,还没有找到插入位置就需要进入while循环*/ 17. while (insertIndex >= 0 && insertVal < arr[insertIndex]) { 18. arr[insertIndex + 1] = arr[insertIndex]; 19. insertIndex--; 20. } 21. // 当退出 while循环时,说明插入的位置找到或者insertIndex<0。注意必须:insertIndex + 1 22. arr[insertIndex + 1] = insertVal; 23. } 24. } 25. }