java插入排序

插入排序

思路:
把集合分成有序表与无序表,最开始有序表只有一个元素,无序表有n-1个元素,排序过程中每次取出无序表的第一个元素,然后与有序表中的元素比较,插入到适当位置
小结:
1.一共要进行n-1次排序循环

排序过程

排序前---
[101, 34, 119, 1]1轮插入后---
[34, 101, 119, 1]2轮插入后---
[34, 101, 119, 1]3轮插入后---
[1, 34, 101, 119]

代码实现:

public class InsertSort {public static void main(String[] args) {int arr[] = {101, 34, 119, 1};System.out.println("排序前---");System.out.println(Arrays.toString(arr));insertSort(arr);}public static void insertSort(int[] arr) {//因为无序集合的第一个数是arr[1]for (int i = 1; i < arr.length; i++) {//第一轮 34,101,119,1int insertVal = arr[i];//待插入的数(针对无序集合),是无序集合中的第一个arr[1],arr[0]是有序集合的第一个int insertIndex = i-1;//insertval的下标前一个数,要插入的位置//insetVal找到要插入的位置//insertIndex >= 0保证其不要越界//insertVal<arr[insertIndex]待插入的数还没有找到插入位置,arr[insertIndex]还得向后移//要插入的数得小于要插入下标位置的数while (insertIndex >= 0 && insertVal < arr[insertIndex]) {//arr[insertIndex]向后移arr[insertIndex + 1] = arr[insertIndex];insertIndex--;}//判断是否需要赋值if (insertIndex+1!=i){//当退出while()时说明,要插入的位置找到:insertIndex+1arr[insertIndex+1]=insertVal;}System.out.println("第"+i+"轮插入后---");System.out.println(Arrays.toString(arr));}}
}

无注释版:

public class TestSort {public static void main(String[] args) {int arr[] = {101, 34, 119, 1};System.out.println("排序前---");System.out.println(Arrays.toString(arr));insertSort(arr);}public static void insertSort(int[] arr) {for (int i = 1; i <arr.length ; i++) {int value=arr[i];int index=i-1;while (index>=0&&value<arr[index]){arr[index+1]=arr[index];index--;}if (index+1!=i){arr[index+1]=value;}System.out.println("第"+i+"轮插入后---");System.out.println(Arrays.toString(arr));}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个简单JavaAgent的实现

一、什么是javaagent javaagent是一个JVM“插件”&#xff0c;一种专门精心制作的.jar文件&#xff0c;它能够利用JVM提供的Instrumentation API。 1.1、概要 Java Agent由三部分组成&#xff1a;代理类、代理类元信息和JVM加载.jar和代理的机制&#xff0c;整体内容如下图所…

Openai的openai新版本调用方式

最近大家有没有发现Openai的openai已经更新到1.6.1了,而且API的调用方式发生了巨大的变化,下面来看看openai新的调用方式吧。 欢迎关注公众号 module ‘openai’ has no attribute ChatCompletion. 提示openai的版本过低。(pip install -U openai) 1. Chat API from openai…

计算机系统基础 计算机系统的基本组成与基本功能

基础知识点 1.1946年第一台通用电子计算机ENIAC诞生 2.冯.诺依曼结构: 组成:输入设备,输出设备,存储器,运算器,控制器 3.现代计算机结构模型: 组成 CPU中央处理器 PC程序计数器 IR指令寄存器 ALU算数逻辑部件 GPRs通用寄存器组 MAR存储器地址寄存器 MDR存储器数据寄存器 知…

Android UI卡顿监控

一、背景 应用的使用流畅度&#xff0c;是衡量用户体验的重要标准之一。Android 由于机型配置和系统的不同&#xff0c;项目复杂App场景丰富&#xff0c;代码多人参与迭代历史较久&#xff0c;代码可能会存在很多UI线程耗时的操作&#xff0c;实际测试时候也会偶尔发现某些业务…

linux查看内核版本信息

使用命令 uname -acat /proc/version

C语言学习:snprintf()函数

函数原型&#xff1a; int snprintf(char* dest_str,size_t size,const char* format,...);函数功能&#xff1a; 先将可变参数 “...” 按照format的格式格式化为字符串&#xff0c;然后再将其拷贝至dest_str中。 头文件&#xff1a; #include<stdio.h>注意事项&…

物理 质点运动学

常用公式 重点 1.求轨道方程:消去时间t 2.dr---->位置矢量大小的增量 3.求方向:tanax/y 4.求位置也就是求位移rxiyj即可 习题解析 1.求运动时一定要求出加速度,变速与匀速就是看a 2.求位移时必须看X0是不是为0,如果不为0,求位移与路程时都要减去x0 3. 记住等号两边统一…

使用CLion的时候,对于cmake的使用

问题概述 使用CLion的时候&#xff0c;一个大的项目会有一个总的CMakeLists.txt&#xff0c;这个是控制整个项目的编译环境&#xff0c;但是针对测试的代码会有自己的单独的CMakeLists.txt&#xff0c;这个单独的cmake文件是控制自己的程序所需要的环境即使是编译单独的测试程…

Android NDK之静态/动态注册Native方法

一、简介 关于NDK有两种方法注册&#xff1a;静态注册和动态注册。 静态注册&#xff1a; 就是直接在Java文件里写个native方法 然后再c/c文件中实现这个方法就行了&#xff1b;动态注册&#xff1a; 就是为了不要写很长的方法名&#xff0c;用JNI_OnLoad方法实现预注册&…

概率论 条件概率 全概率 贝叶斯公式

常用知识点 条件概率 1.P(B|A)1表示A发生的情况下B必然发生 A属于B 2.可列可加性 P(BUC|A)P(B|A)P(C|A) 3.P(B|A)的样本空间为A,A与B都发生了 大题解答思路 1.首先设取出一件商品为次品为事件A 2.写B1:甲生产,B2:乙生产 PB1…PB2… P(A|B1)…P(A|B2)… 3.写PAPB1*P(A|B1)……

使用命令行的方式,将ini配置文件中的配置信息传递给程序

ini配置文件 {"device_type": "fake","device_socket": "192.168.1.108:5000"} 使用rpc的方式 ./bin/hsm_device_apitest --gtest_filter"*aes_test" --device-type rpc --device-socket 192.168.1.108:5000 使用fake的方…

C语言学习:malloc()函数

函数声明&#xff1a; void *malloc(size_t size)头文件&#xff1a; #include <stdio.h>函数描述&#xff1a; 分配所需的内存空间&#xff0c;并返回一个指向它的指针。 参数&#xff1a; size – 内存块的大小&#xff0c;以字节为单位。 返回值&#xff1a; 该…

java 希尔排序

希尔排序(更高效的插入排序) 减少最小数在最后一位的情况下要循环的次数 思路: 把数组按增量(n/2)分组,对每一组使用插入排序去排序交换位置,然后不停地增量/2,直到其为1时,结束 分组:如n/25 891723 8与3为一组 从不包含本身的数开始数两种实现方法: 交换法(效率较低) 移动法…

使用gtest进行自己的单独测试的代码介绍

命令行 ./bin/hsm_device_apitest --gtest_filter"*aes_test" --device-type rpc --device-socket 192.168.1.108:5000 命令详解 进入工程文件&#xff0c;mkdir build&#xff0c;cd build在build的文件夹下面执行cmake命令和make命令之后&#xff0c;会在build文…

C语言学习:%d、2d、02d、.2d的区别

%d&#xff1a;为普通的输出。 %2d&#xff1a;按宽度为2输出&#xff0c;右对齐方式输出。若不够两位&#xff0c;左边补空格。 %02d&#xff1a;同样宽度为2&#xff0c;右对齐方式。位数不够&#xff0c;左边补0。 %.2d&#xff1a;从执行效果来看&#xff0c;与%02d一样…

计算机系统基础 数据的表示和存储

数制和编码 1.信息的二进制编码 2.进制转换必须要知道: 1)使用哪一个进制(二,八…) 2)定点数还是浮点数(关于小数点的问题) 3)编码问题----原码,补码,反码,移码 3.进制转换 1)R进制转十进制(按权展开) ----R进制 ----八进制与十六进制 ----R转换为十进制 2)十进制转换为R…

C++中vector章节iterator与const_iterator及const iterator区别

C目前倾向于使用迭代器遍历容器中的元素&#xff0c;而不是使用下标访问的方式来访问容器中的元素。可以使用iterator和const_iterator来访问元素&#xff0c;但是const类型的容器&#xff0c;那么只能用const_iterator来遍历。区别在于iterator可以改变元素的数值&#xff0c;…

Android查看当前应用已经加载的so库

源代码&#xff1a; private static List<String> allSOLists new ArrayList<String>();/** * 获取全部已加载的SO库*/private void getAllSOLoaded(){allSOLists.clear();// 当前应用的进程IDint pid Process.myPid();String path "/proc/" pid &q…

Android 进程监控(top命令)

文章目录一、查看top命令Android N&#xff08;7.1系统&#xff0c;level 25&#xff09; 及之前Android O&#xff08;8.0系统&#xff0c;level 26&#xff09; 及之后二、top -n [number]Android N&#xff08;7.1系统&#xff0c;level 25&#xff09; 及之前Android O&…