简单插入排序

插入排序法介绍

插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

插入排序法思想

  1. 把 n 个待排序的元素看成为一个有序表和一个无序表
  2. 一开始时有序表中只包含一个元素(arr[0]),无序表中包含有 n-1 个元素(arr[1]~arr[n])
  3. 排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

插入排序思路图

 

 

 代码实现

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 = 1i < 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. }  

 

posted @ 2020-11-02 15:03  白刃天使  阅读(462)  评论(0编辑  收藏  举报