吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1589|回复: 5
收起左侧

[Java 转载] 【Java】数据结构-插入排序法

  [复制链接]
孤樱懶契 发表于 2021-6-24 22:03

插入排序法

  • 从[0,i)每一位跟自己i-1进行比较大小,如果小,就交换到前面,如果大就不变。

插入排序法执行截图

image-20210624185045631

插入排序法代码(完整)

InsertionSort.java

public class InsertionSort {

        private InsertionSort(){} //私有类

        public static <E extends Comparable<E>> void sort(E[] arr){

            for(int i = 0 ; i < arr.length ; i++){
                // 将arr[i]插入到合适的位置
//                for(int j = i ; j > 0; j--)  //不断和前面的值比较,小就交换,大就结束
//                    if(arr[j].compareTo(arr[j-1])<0)
//                        swap(arr, j , j-1);
//                    else break;
                for(int j = i; j > 0 && arr[j].compareTo(arr[j-1])<0; j-- )
                    swap(arr,j,j-1);
            }
        }

        private static <E> void swap(E[] arr, int i , int j){

        E t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }
    public static void main(String[] args) {

        int[] dataSize = {10000, 100000};
        for (int n : dataSize) {
            Integer[] arr = ArrayGenerator.generateRandomArray(n, n);
            SortingHelper.sortTest("InsertionSort", arr);

        }
    }
}

SortingHelper.java(延续了前面的选择排序法)

public class SortingHelper {

    private SortingHelper(){}

    public static <E extends Comparable<E>> boolean isSorted(E[] arr){

        for(int i = 1; i< arr.length; i++)
            if (arr[i - 1].compareTo(arr[i]) > 0)
            return false;
        return true;
    }

    public static <E extends Comparable<E>> void sortTest(String sortname, E[] arr){
        long startTime = System.nanoTime();
        if(sortname.equals("SelectionSort"))
            SelectionSort.sort(arr);
        else if(sortname.equals("InsertionSort"))
            InsertionSort.sort(arr);
        long endTime = System.nanoTime();
        for(E e:arr){
            System.out.println(e);
        }

        double time = (endTime - startTime) / 1000000000.0; //纳米要/9个零

        if(!SortingHelper.isSorted(arr))
            throw new RuntimeException(sortname + "failed");
        System.out.println(String.format("%s , n = %d : %f s ", sortname, arr.length, time));
    }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
片面晨光 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

梦毁他城 发表于 2021-6-24 22:06
这个,我还真不会,mark一下
ytlk0535 发表于 2021-6-24 23:19
祈愿啊 发表于 2021-6-24 23:25
13169456869 发表于 2021-6-25 09:19
学习一下!!
pqingquan 发表于 2021-6-25 09:37
哈哈哈好久没看过排序了,感谢楼主分享~

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表