美文网首页
插入排序java实现

插入排序java实现

作者: 牙齿不帅 | 来源:发表于2020-05-12 20:24 被阅读0次
import java.util.Arrays;

public class Insert {
    public static void main(String args[]) {
        int array[] = {4, 3, 1, 2, 5};
        sort2(array);
        System.out.println(Arrays.toString(array));
    }

    /**
     * 5 .4 3 2 1
     * 5 5 3 2 1
     * .4 5 3 2 1
     * <p>
     * 4 5 .3 2 1
     * 4 4 5 2 1
     * .3 4 5 2 1
     * <p>
     * 以上类推
     * <p>
     * 插入排序,类似于扑克中的抓牌,每次抓取牌的时候都与手中的牌进行比较,如果手中的牌都大于此牌,将这些牌都往右移,然后此牌插入。
     * 时间复杂度没有最坏的情况,比较稳定
     * 最坏情况:
     * 一层:n
     * 二层+三层:(1+...(n-2))
     * <p>
     * O(n+(n-1)*n/2)=n+n^2/2+1/2*n=3/2*n+n^2/2=O(n+n^2)
     *
     * @param array
     */
    public static void sort(int array[]) {
        int n = 0;
        for (int i = 1; i < array.length; i++) {
            int a = array[i];
            int n1 = 0;
            for (int j = 0; j < i; j++) {
                int b = array[j];
                int n2 = 0;
                if (a < b) {
                    for (int k = i; k > j; k--) {
                        array[k] = array[k - 1];
                        n++;
                        n2++;
                    }
                    array[j] = a;
                    break;
                }
                System.out.println("count2:" + n2);
                n++;
                n1++;
            }
            System.out.println("count1:" + n1);
            n++;
        }
        System.out.println("count:" + n);
    }

    /**
     * 3, 1, 4, 2, 5 k=0
     * 3, 3, 4, 2, 5 k=-1
     * 1, 3, 4, 2, 5 k=0
     *
     * 1, 3, .4, 2, 5 k=1
     * 1, 3, 4,  2, 5 k=2
     *
     * 少了一层循环,代码更简洁了,sort1方法的2层循环是从头比较,如果发现有比自己大的,就将大的之后的整体右移,然后替换当前。
     * 而此方法是:与元素前面的每一个比较,碰到比自己大的就把大的右移,没有比自己大的那就是我的位置。
     * 时间复杂度:
     * 最坏:跟sort1一样
     * 最好:(n-1)*2
     * @param array
     */
    public static void sort2(int array[]) {
        int n = 0;
        for (int i = 1; i < array.length; i++) {
            int a = array[i];
            int k = i - 1;
            //>=0是为了比较到第一个
            for (; k >= 0; k--) {
                //如果小于当前元素就向右移动
                if (a < array[k]) {
                    array[k + 1] = array[k];
                } else {
                    //如果大于或等于,
                    break;
                }
            }
            array[k + 1] = a;
            n++;
        }
        System.out.println("count:" + n);
    }
}

相关文章

  • java快速学习排序---插入排序

    1.java实现插入排序 (1)、图解插入排序 (2)、插入排序的思想 (3)、插入排序的代码实现

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • java 实现排序算法之「插入排序」

    java 实现排序算法系列 这是 Java 实现排序算法的第三篇文章——插入排序算法。插入排序可以说成是「一类」简...

  • (306)排序-java实现的选择/插入/希尔排序

    引言 用java实现的选择排序、插入排序、希尔排序。 代码(java) 运行结果

  • Java 实现插入排序

    本文介绍插入排序原理及 Java 语言实现。 目录 插入排序原理 代码实现版本一版本二单元测试 插入排序原理 从第...

  • 插入排序java实现

    //插入排序//基本思想://在要排序的一组数中,假定前n-1个数已经排好序,//现在将第n个数插到前面的有序数列...

  • Java 实现插入排序

    public class InsertSortNumber { public static void main(S...

  • Java实现插入排序

    插入排序(Insertion Sort),是一种简单直观并且稳定的排序算法。 从前到后取每个元素和之后的元素进行比...

  • 插入排序java实现

    插入排序,就是将数组中的一个个元素插入到已经排好序的数组中. 代码实现: 上面那个是我自己写的,和书上写的还是有一...

网友评论

      本文标题:插入排序java实现

      本文链接:https://www.haomeiwen.com/subject/tywgzqtx.html