排序算法——插入排序

418 阅读1分钟

1. 算法思想

插入排序属于减治法的减一技术,即每一趟排序后将问题的规模减 1,其基本思想是:依次将待排序序列中的每一个记录插入到一个已排好序的序列中,直到全部序列都已排好序

2. 具体过程

  1. 将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有的剩余待排序的记录;
  2. 将无序区的第一个记录插入到有序区的合适位置,从而使无序区减少一个记录,有序区增加一个记录;
  3. 重复执行步骤2,直到无序区的记录为空

3. 动画演示

插入排序

4. 代码实现

Java 代码实现插入排序算法(升序):

/**
 * @author created by linjunhao
 * @date 2020/3/27
 * @description 插入排序
 */
public class InsertSort {

    public void sort(int[] values, int start, int end) {
        int temp, position;
        //从第二个记录开始执行插入操作
        for (int i = 1; i <= end; i++) {
            //暂存待插入记录
            temp = values[i];
            //记录插入位置
            position = i - 1;
            //寻找插入位置
            while (position != -1 && temp < values[position]) {
                //比待插记录大的往后移动
                values[position + 1] = values[position];
                //插入位置往前移动
                position--;
            }
            //把待查记录放在正确的位置上
            values[position + 1] = temp;
        }
    }
}

4. 算法分析

  • 插入排序算法的时间复杂度为 O(n^2)

5. 其他排序

冒泡排序

选择排序

快速排序

归并排序