插入排序(学习笔记)

插入排序

每一轮插入排序后的结果与打扑克牌取牌原理相似,将取到的牌插入到合适的位置,但在程序实现方面还是基于交换的算法。
它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。


java 复制代码
import java.util.Random;

public class InsertSelect {
    public static void main(String[] args) {
        int[] arr = createArray(10);
        printArray(arr);
        //插入排序
        insertSort(arr);
        System.out.println("插入排序后的数组为:");
        printArray(arr);
    }
    public static void insertSort(int[] arr){
        if (arr == null || arr.length < 2){
            return;
        }

        for (int i = 1; i < arr.length; i++) {//0~i 做到有序

            for (int j = i-1;j>=0&&arr[j]>arr[j+1];j--){//j>=0 防止j--数组下标越界
                //不停的交换,直到0------i是有序的
                swap(arr,j,j+1);
            }

        }
    }

    //交换数组元素的方法
    public static void swap(int[] arr,int i,int j){
        //异或交换法------i和j是一个位置的话就会出错
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];

        //常规交换
       /* int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;*/
    }
    //随机生成数组,数组中的元素[0,20)
    public static int[] createArray(int length) {
        int[] arr = new int[length];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(20);//[0,20)
        }
        return arr;
    }

    //打印数组方法
    public static void printArray(int[] arr){
        for (int i=0;i<arr.length;i++) {
            if (i==0){
                if (arr.length==1){
                    System.out.println("["+arr[0]+"]");
                }else{
                    System.out.print("["+arr[i]+",");
                }
            }else if(i==arr.length-1){
                System.out.println(arr[i]+"]");
            }else {
                System.out.print(arr[i]+",");
            }

        }
        System.out.println("--------------------------------------------------------");
    }
}
相关推荐
好望角雾眠1 小时前
第一阶段C#基础-10:集合(Arraylist,list,Dictionary等)
笔记·学习·c#
艾伦~耶格尔1 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
星仔编程2 小时前
python学习DAY46打卡
学习
大霞上仙2 小时前
实现自学习系统,输入excel文件,能学习后进行相应回答
python·学习·excel
yatingliu20194 小时前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
郭庆汝4 小时前
CMake概述用法详细笔记
笔记
武当豆豆4 小时前
C++编程学习(第25天)
开发语言·c++·学习
张人玉4 小时前
XML 序列化与操作详解笔记
xml·前端·笔记
风和日丽 随波逐流4 小时前
java17学习笔记-Deprecate the Applet API for Removal
笔记·学习
淮北也生橘124 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习