• 插入排序的基本实现


      插入排序是非常好理解的。看图:

      注意,这里比较是从最后一个元素往前比较,如果当前的元素比上一个大,那么比较和交换的工作就此停止。如果是每次都从第一位开始比较的话,那么无论是否已经排好顺序,总是会比较n-1个元素,次数上是会比这种方法多的。

      代码如下:

    public class InsertionSort {
    
        /**
         * 从第一个元素开始,与前面的元素进行比较
         * 如果当前元素大于上一个元素,那么比较停止,进入下一轮
         * 如果当前元素小于上一个元素,那么交换该元素与上一个元素,继续与之前的比较,一直到array[0]
         *
         * @param array
         */
        public static void sort(int[] array) {
            if (array == null || array.length < 2) {
                return;
            }
    
            for (int i = 1; i < array.length; i++) {
                for (int j = i; j >= 1; j--) {
                    if (array[j] >= array[j - 1]) {
                        break;
                    }
                    Common.swampValue(array, j, j - 1);
                }
            }
        }
    
        public static void main(String[] args) {
            int[] array = {2, 3, 1, 4, 2, 44, 32, 13, 12, 56, 32, 12, 33, 21, 15, 16, 76, 45, 32, 33, 121, 123, 123, 122};
            sort(array);
            System.out.println("Arrays.toString(array) = " + Arrays.toString(array));
        }
    }

      插入排序的最优情况就是完全顺序或者完全相等,那么当前元素与上一个比较之后就进入下一轮,时间复杂度为O(n)。最差情况就是倒序,时间复杂度为O(n^2),平均复杂度也为O(n^2)。空间复杂度由于每次都是一一比较交换,所以复杂度为O(1)。

  • 相关阅读:
    第三周课程总结&实验报告
    2019春学习总结
    第十二周
    第十一周
    第十周
    第九周
    第八周作业
    第七周作业
    实验报告3&学习总结
    实验报告2
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/15321966.html
Copyright © 2020-2023  润新知