插入排序(学习笔记)

插入排序

每一轮插入排序后的结果与打扑克牌取牌原理相似,将取到的牌插入到合适的位置,但在程序实现方面还是基于交换的算法。
它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增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("--------------------------------------------------------");
    }
}
相关推荐
لا معنى له6 小时前
学习笔记:Restormer: Efficient Transformer for High-Resolution Image Restoration
图像处理·笔记·学习·计算机视觉·transformer
claider7 小时前
Vim User Manual 阅读笔记 Usr_05.txt Set your settings 设置你的设置
笔记·编辑器·vim
科技林总7 小时前
【系统分析师】3.4 指令系统
学习
li星野7 小时前
OpenCV4.X学习-视频相关
学习·音视频
万事可爱^8 小时前
LangChain v1.0学习笔记(4)—— 核心组件Models
人工智能·笔记·学习·langchain·大模型
卡布叻_星星8 小时前
笔记之光盘刻录
笔记
寄思~8 小时前
Excel 数据匹配工具 -笔记
笔记·python·学习·excel
朔北之忘 Clancy9 小时前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法
知识分享小能手9 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker
数据轨迹0019 小时前
CVPR Efficient ViM:视觉 Mamba 的轻量化
经验分享·笔记·facebook·oneapi·twitter