Java如何实现插入排序

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

排序算法-----插入排序 InsertSort

package com.epoch.createcarnumber.utils;

import java.util.Arrays;
import java.util.Random;

public class InsertSort {
    //两数交换位置
    private static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    private static void sort(int[] a) {
        /*
         * 插入排序
         *                      j
         * [5,6,16,19,19,19,34,42,39,26]
         *                         i
         * *) 先认为第一个值是有序数字序列
         * *) 从第二个值开始,把每个值向前插入到正确位置
         * *) 插入过程
         *    *) j循环从i-1向前递减
         *    *) 如果j位置值>j+1位置值,j和j+1位置交换
         *    *) 否则,中断j循环
         */
        for (int i = 1; i < a.length; i++) {
            //j循环作用:把i位置值,向前插到正确位置
            for (int j = i - 1; j >= 0; j--) {
                //j位置值>j+1位置值
                if (a[j] > a[j + 1]) {
                    swap(a, j, j + 1);//小值往前换
                }
                else {
                    break;//已经插好,j结束
                }
            }
            System.out.println(Arrays.toString(a));
        }
    }

    private static int[] randmo() {
        /*
         * 1.随机长度5+[0,6),存到变量len
         * 2.新建len长度的int[]数组存到变量a
         * 3.遍历填入100内随机值
         * 4.返回数组a
         */
        int len = 5 + new Random().nextInt(6);
        int[] a = new int[len];
        for(int i=0;i<a.length;i++) {
            a[i] = new Random().nextInt(100);
        }
        return a;
    }

    public static void main(String[] args) {
        //随机乱序数组
        int[] a = randmo();
        System.out.println(Arrays.toString(a));
        System.out.println("-------------------");
        sort(a);//排序
        System.out.println("-------------------");
        System.out.println(Arrays.toString(a));
    }
}

猜你喜欢

转载自blog.csdn.net/u012431703/article/details/95311558