zoukankan      html  css  js  c++  java
  • Java排序算法 [插入排序]

    package cn.com.dom4j.sort;
    
    import java.util.Arrays;
    
    public class Test2 {
    
        /*
         插入排序
    
         插入排序是最简单的排序算法之一
         插入排序由 N - 1趟排序组成, 对于 p = 1到 N - 1趟, 插入排序保证从 0到位置 p - 1上的元素为已排序状态
    
         基本思路: 在第 p趟, 我们将位置 p上的元素向左移动, 知道它在前 p + 1个元素中的正确位置被找到的地方
         */
        public static <AnyType extends Comparable<? super AnyType>> void insertionSort_1(AnyType[] arr) {
    
            for (int i = 1; i < arr.length; i++) {
                for (int j = i; j > 0 && arr[j].compareTo(arr[j - 1]) < 0; j--) {
                    swap(arr, j, j - 1);
                }
            }
        }
    
        /*
         上面排序中存在的缺陷:
            在寻找第 p个元素的正确位置时, 采用了相邻元素比较并交换位置的方式, 这样会产生多余赋值操作
    
         解决方式:
            记录第 p个元素的值, 逐一和前面元素比较, 比 p大的元素, 位置后移一个 (a[j] = a[j-1]), 直到遇到比 p小的元素.
            最后把 p放在终止时的位置(第一个遇到的比 p小的元素后面)即可
         */
    
        /**
         * 优化过后的插入排序
         */
        public static <AnyType extends Comparable<? super AnyType>> void insertionSort_2(AnyType[] a) {
    
            int j;
            for (int p = 1; p < a.length; p++) {
                AnyType tmp = a[p];
                for (j = p; j > 0 && tmp.compareTo(a[j - 1]) < 0; j--)
                    a[j] = a[j - 1];
                a[j] = tmp;
            }
        }
    
    
        /**
         * 交换数组中两个元素的位置
         */
        public static <AnyType extends Comparable<? super AnyType>> void swap(AnyType[] arr, int i, int j) {
            if (arr == null || arr.length <= 1 || i == j) {
                return;
            }
    
            AnyType tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }


  • 相关阅读:
    IDEA 翻译插件网络错误
    win10 商店无法访问网络
    java 将中缀表达式转换成后缀表达式(逆波兰表达式)
    队列(Queue)
    单向链表
    Linux学习笔记2--------用户和组
    Linux学习笔记1-----------打包压缩,Vim
    如何修改主机名
    Linux的rpm软件包和yum软件包和wget
    Fiddler抓取电脑,手机https数据
  • 原文地址:https://www.cnblogs.com/bobo132/p/13950373.html
Copyright © 2011-2022 走看看