插入排序(学习笔记)

插入排序

每一轮插入排序后的结果与打扑克牌取牌原理相似,将取到的牌插入到合适的位置,但在程序实现方面还是基于交换的算法。
它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增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 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
L_cl2 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain2 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
青椒大仙KI112 小时前
24/11/13 算法笔记<强化学习> DQN算法
笔记·算法
三小尛2 小时前
快速排序(C语言)
数据结构·算法·排序算法
椅子哥2 小时前
数据结构--排序算法
java·数据结构·算法·排序算法
提笔惊蚂蚁2 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
DDDiccc2 小时前
JAVA学习日记(十五) 数据结构
数据结构·学习
2301_799084672 小时前
超全排序C语言实现
c语言·数据结构·算法·排序算法