插入排序

1.算法步骤

  将第一个待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列.

  从头到尾一次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置.(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面).

2.举例说明

  (1)直接插入排序

  

现有一个无序数组,共7个数:89 45 54 29 90 34 68。

使用直接插入排序法,对这个数组进行升序排序。

  89 45 54 29 90 34 68

  45 89 54 29 90 34 68

  45 54 89 29 90 34 68

  29 45 54 89 90 34 68

  29 45 54 89 90 34 68

  29 34 45 54 89 90 68

  29 34 45 54 68 89 90

3.代码展示

 1 //java代码实现---插入排序
 2 public class InsertSort implements IArraySort{
 3 
 4     @Override
 5     public int[] sort(int[] sourceArray) {
 6         //对arr进行拷贝,不改变参数内容
 7         int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
 8         
 9         //从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个
10         
11         for(int i = 1;i < arr.length ; i++){
12             
13             //记录要插入的数据
14             int tmp = arr[i];
15             
16             //从已经排序的序列最右边的开始比较,找到比其小的数
17             
18             int j = i;
19             while(j > 0 && tmp < arr[j-1]){
20                 arr[j] = arr[j-1];
21                 j--;
22             }
23             //存在比其小的数,插入
24             if(j!=i){
25                 arr[j] = tmp;
26             }
27         }
28         return arr;
29         
30     }
31 
32 }
原文地址:https://www.cnblogs.com/xiaofantongxue/p/10452903.html