首页 > 编程语言 >java练习-插入排序

java练习-插入排序

时间:2023-07-10 11:35:11浏览次数:37  
标签:arr 遍历 java int 插入排序 练习 length ++ startIndex

package com.example.ss_0203_array.test.test_0710;

/**
* 分析:
* 1、数组遍历找出第一个开始乱序的索引,默认此索引之后的数组是无序的:startIndex
* 2、遍历数组,内嵌遍历后面的无序数组,比较当前数值和无序数组中的数值,大于则交换两个索引的数值,遍历完成,则数值交换完成
*/
public class test1 {
public static void main(String[] args) {
int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
insertSort(arr);
}

private static void insertSort(int[] arr) {
int startIndex = 0;
for (int i = 0; i < arr.length-1; i++) {
if(arr[i]>arr[i+1]){
startIndex = i;
break;
}
}
for (int i = 0; i < arr.length; i++) {
for (int i1 = startIndex; i1 < arr.length; i1++) {
if(arr[i]>arr[i1]){
int t = arr[i1];
arr[i1]=arr[i];
arr[i] = t;
}
}
startIndex ++;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}

  

课程提供的遍历方式:

public class A03_InsertDemo {
    public static void main(String[] args) {
        /*
            插入排序:
                将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。
                遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
                N的范围:0~最大索引

        */
        int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

        //1.找到无序的哪一组数组是从哪个索引开始的。  2
        int startIndex = -1;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > arr[i + 1]){
                startIndex = i + 1;
                break;
            }
        }

        //2.遍历从startIndex开始到最后一个元素,依次得到无序的哪一组数据中的每一个元素
        for (int i = startIndex; i < arr.length; i++) {
            //问题:如何把遍历到的数据,插入到前面有序的这一组当中

            //记录当前要插入数据的索引
            int j = i;

            while(j > 0 && arr[j] < arr[j - 1]){
                //交换位置
                int temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
                j--;
            }

        }
        printArr(arr);
    }

    private static void printArr(int[] arr) {
        //3.遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

}

  

 

标签:arr,遍历,java,int,插入排序,练习,length,++,startIndex
From: https://www.cnblogs.com/pangchunlei/p/17540483.html

相关文章

  • Java 集合框架
    Java集合框架Java集合框架是每一个入门开发者必会的内容,而且在较长的时间内容,不管是使用还是面试频度否非常的高,所以本人认为完全的、深入的学习是十分有必要的。本人结合源码和网络上的相关文章进行了总结。CollectionCollection是List和Set的父类,它抽象了单列数据集合......
  • Java 并发
    Java并发线程基础进程线程概念进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O):进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互......
  • JavaCV实现旋转图像识别和旋转角度预测
    引言本文将介绍如何使用JavaCV库来实现图像识别和旋转角度预测,并结合直方图统计和dhash算法来比较图片的相似度。JavaCV是一个基于OpenCV的Java库,提供了丰富的图像处理和计算机视觉功能。环境搭建在开始之前,需要安装JavaCV库和相关依赖。可以通过Maven或手动下载jar包的方式进......
  • 如何实现java Docker Engine API的具体操作步骤
    使用Java实现DockerEngineAPI引言Docker是一款非常流行的容器化平台,它可以让开发者更方便地构建、交付和运行应用程序。Docker提供了一系列的API,用于管理和操作Docker引擎,通过这些API可以实现容器的创建、启动、停止等操作。本文将向你介绍如何使用Java来实现DockerEngineAPI......
  • java项目 报错 maven jdk.tools 缺失 解决方法
    一、解决方法配置文件pom.xml<dependency><groupId>jdk.tools</groupId><artifactId>jdk.tools</artifactId><version>1.7</version><scope>system</scope><systemPath>${......
  • java实现上传zip解压及判断压缩包文件夹功能
    直接上Service,通过代码看思路贯穿整个功能,很多工具类可以复用,文件路径可以去看我博客里的(使用ResourceBundle国际化资源文件读取properties详解) 这篇制作方法url:html页面<span>ZIP:</span><inputtype="file"style="width:170px"name="hostFileBatch"/><spanid="host......
  • Java获取名字首字母拼音及用户按名字拼音分组工具
    一、需求分析最近在做一个类似于微信用户通讯录的功能,所以考虑通过查找的好友列表,在后台遍历按照26个字母分组,前台获取到Json循环26个字母直接解析对应的字符下的名称为一组分隔,没有则不显示,工具如下↓二、引入Pom<dependency> <groupId>com.belerweb</groupId> <artif......
  • Java大厂面试必考真题算法篇(持续更新)十一、java 统计字符串中每个字符出现的次数
    一、写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。答案importjava.util.*;publicclassSolution{/***反转字符串*@paramstrstring字符串*@returnstring字符串*/publicStringsolve(Stringstr){if(str......
  • java使用百度翻译接口实现前后端翻译功能
    java 百度翻译工具类 分别有前端和后端的 例子及工具使用百度翻译接口需要网上申请key,代码里面有URL。packagecn.secure.util;importjava.io.BufferedReader;importjava.io.Closeable;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStrea......
  • java 线程等待和唤醒方法
    java线程状态变迁图从图中可以看出Java线程等待方法是将线程从Runnable状态转换为Waiting状态,Java线程的唤醒方法是将线程从Waiting状态唤醒进入Runnable状态在Java中线程的等待和唤醒主要是分为3组:Object.wait()和Object.notify()LockSupport.park()和LockSupport.unp......