插入排序(学习笔记)

插入排序

每一轮插入排序后的结果与打扑克牌取牌原理相似,将取到的牌插入到合适的位置,但在程序实现方面还是基于交换的算法。
它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增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("--------------------------------------------------------");
    }
}
相关推荐
Jayyih6 小时前
嵌入式系统学习Day36(简单的网页制作)
学习·算法
QT 小鲜肉6 小时前
【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
c++·笔记·qt·学习方法·ai编程
zheshiyangyang6 小时前
TypeScript学习【一】
javascript·学习·typescript
optimistic_chen7 小时前
【Java EE进阶 --- SpringBoot】Spring DI详解
spring boot·笔记·后端·spring·java-ee·mvc·di
T1an-18 小时前
Axum web框架【实习】
学习·rust
知识分享小能手8 小时前
React学习教程,从入门到精通, React 新创建组件语法知识点及案例代码(11)
前端·javascript·学习·react.js·架构·前端框架·react
清木!8 小时前
数据仓库详解
笔记
@小红花9 小时前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
mysla9 小时前
嵌入式学习day45-硬件—汇编
汇编·学习
永日4567010 小时前
学习日记-HTML-day51-9.9
前端·学习·html