Java三大常用数组元素排序法,插入/选择/冒泡

java 可输入的冒泡排序 可输入的冒泡排序法~ 综合更改的版本~ java ban 立即下载


一, 插入排序

思想: 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置,直到全部插入排序完为止.
关键问题: 在前面已经排好序的序列中找到合适的插入位置.
两个常用方法:
–直接插入排序
–二分插入排序
 
1,直接插入排序(从后向前找到合适位置后插入),循环点记忆: for (int j = i-1; j >= left; j--)
 
public class ZcSort {

    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //直接插入排序
        for (int i = 1; i < a.length; i++) {
            //待插入元素
            int temp = a[i];//每一次重新赋值temp
            int j;
            for (j = i-1; j>=0; j--) {
                //将大于temp的往后移动一位
                if(a[j]>temp){
                    a[j+1] = a[j];
                }else{
                    break;
                }
            }
            a[j+1] = temp;
        }
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

}

文件初态不同时,直接插入排序所耗费的时间有很大差.若文件初态为正序,则每个待插入的记录只需要比较一次就能够找到合适的位置插入;
若初态为反序,则第a[i]个待插入记录需要比较i次才能找到合适位置插入;
 
2, 二分法插入排序(按二分法找到合适位置插入)
   循环点记忆:  for (j = i-1; j>=0; j--)
public class EfSort {
    public static void main(String[] args) {
        int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //二分插入排序
        sort(a);
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

    private static void sort(int[] a) {
        for (int i = 0; i < a.length; i++) {
            int temp = a[i];
            int left = 0;
            int right = i-1;
            int mid = 0;
            while(left<=right){
                mid = (left+right)/2;
                if(temp<a[mid]){
                    right = mid-1;
                }else{
                    left = mid+1;
                }
            }
            for (int j = i-1; j >= left; j--) {
                a[j+1] = a[j];
            }
            if(left != i){
                a[left] = temp;
            }
        }
    }
}
二分插入排序的比较次数与待排序记录的初始状态无关,仅依赖于记录的个数;
当n较大时,比直接插入排序的最大比较次数少得多.但大于直接插入排序的最小比较次数,总体来说还是由于直接插入法.
 
二, 选择排序
思想: 每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排.
关键问题: 在剩余的待排序记录序列中找到最小关键码记录.
 
 循环点记忆: (int j=i+1;j<a.length;j++)
 
public class XzSort {

    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //简单的选择排序
        for (int i = 0; i < a.length; i++) {
            int min = a[i];
            int n=i; //最小数的索引
            for(int j=i+1;j<a.length;j++){
                if(a[j]<min){  //找出最小的数
                    min = a[j];
                    n = j;
                }
            }
            a[n] = a[i];
            a[i] = min;
            
        }
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }

}

三, 冒泡交换排序

基本思想(向右冒泡方式): 在要排序的一组数中,对当前还未排好序的范围内的全部数,自前到后对相邻的两个数依次进行比较和调整,让较大的数往右(往上)冒.
 
public class BubbleSort {
    public static void main(String[] args) {
        int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8};
        System.out.println("排序之前:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        //冒泡排序
        for (int i = 0; i < a.length; i++) { 
            for(int j = 0; j<a.length-i-1; j++){
                //这里-i主要是每遍历一次都把最大的i个数冒到最右边去了,没有必要再替换了
                if(a[j]>a[j+1]){
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        System.out.println();
        System.out.println("排序之后:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
    }
}

冒泡排序是一种稳定的排序方法:
若文件初状为正序,则一趟起泡就可完成排序,排序码的比较次数为n-1,且没有记录移动,时间复杂度是(n);
若文件初态为逆序,则需要n-1趟起泡,每趟进行n-i次排序码的比较,且每次比较都移动三次,比较和移动次数均达到最大值:(n2).
 


硬件之光实战篇--Boost 当开关管处于关闭状态时,由于电感中的电流在短时间内不能瞬间消失,因此它会产生一个电感电动势,在电容器上加上一个高电压,从而使输出电压变高。--------------------------------------------------------分割线----------------------------------------------------------------在应用中,升压芯片需要根据负载电路的需求,选择合适的电感和电容等元器件,以达到所需要的升压倍数和输出电压。 阅读详情

相关推荐

Sentinel-1 Burst数据处理避坑实录:从aria2c报错到wget脚本救场

本文详细介绍了Sentinel-1 Burst数据处理的完整解决方案,从下载困境到高效处理技巧。针对aria2c报错等常见问题,提供了增强版wget脚本和智能分组方法,显著提升下载成功率和处理效率,特别适合科研机构和企业级网络环境下的哨兵数据处理需求。

weixin_42641998的博客 284

关于public class 类名{ public static void main(String[] args)}的一些说明

1、在java中任何有效的代码必须写到“类体”当中,最外层必须是一个类的定义。 2、public表示公开的,class表示定义一个类,Test是一个类名。类名后面必须是 一对大括号,这一对大括号被称为“类体” 3、大括号必须是成对的。并且建议都要成对编写,这样才不会丢掉。 {} [] () 4、什么时候代码缩进? 我包着你,你就比我低一级。你就需要缩进。 没有合理的缩进,代码可读性很差。 或者也可以这样所,大括号里的都需要缩进。 缩进就是可读性问题,不缩进也不影响程序的编译和执行。 ...

Xue_fabulous的博客 1万+

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程,只好自己写一个了… 参考教材:《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧,很长很长,这里主要是拿来和ols比较。ols是均值回归,求解的方法是残差的平方最小,而这里就是对残差的绝对值用分位数做惩罚。(思想了解一下即可) 第二部分 Stata...

Joycezzz的博客 1万+

JAVA学习笔记(七)

循环结构的基本组成部分,一般可以分成四部分:1.初始化语句:在循环开始最初执行,而且只做唯一一次。2.条件判断:如果成立,则循环继续:如果不成立,则循环退出。3.循环体:重复要做的事情内容,若干行语句。4.步进语句:每次循环之后都要进行的扫尾工作。...

tyryon的博客 199

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入

最近入手了兮克2.5G交换机(兮克SKS1200-8GPY1XF),有 8 个 2.5G 电口和 1 个 10G SFP+ 光口;支持多种组网模式,其中一种是支持使用猫棒接入,由路由器拨号后再回接到交换机,这样就可以替换掉光猫了。

啦啦啦啦 la 1万+

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

多线程学习——JAVA三种线程的创建方式

​ Java中有三种线程创建方式,分别为继承Thread类并重写run的方法,实现Runnable接口的run方法,使用FutureTask方式。 继承Thread类方式的实现。 public class Thread1 extends Thread { @Override public void run() { for(int i=1;i<=10;i++) { System.out.println("多线程执行中..."+i); } } public static v

swy66的博客 460

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1822

Java数组元素排序

java.util.Arrays类的sort()方法提供了数组元素排序功能:     import java.util.*;     public class Sort {         public static void main(String[] args) {             int [] number = {5,600,16,56,747,340,634,7010}

StevenXu的专栏 2485

基于STM32单片机智能循迹小车毕业设计

本文介绍了一种利用STM32F103C8T6单片机为控制核心,结合多种传感器以及PID算法实现循迹避障功能的智能小车。随着我国高科技水平的不断提高和工业自动化进程的不断推进,智能小车被广泛应用于各种玩具和其他产品的设计中,极大地丰富了人们的生活。本次设计利用反射式红外光电传感器探测路面黑线实现小车循迹,利用超声波测距传感器探测路径上的障碍,控制小车自动避障,整个系统具有自动循迹、自动避障、速度检测和无线遥控功能。其中,控制部分采用STM32F103C8T6单片机,STM32F103C8T6单片机是一

qq_48771816的博客 3974

UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象

在 UG NX中,有时需要批量删除某文件夹下多个.prt文件中固定一些图层中的体对象和曲线对象,这时如果采用手动逐个打开模型,并选择针对的图层删除,即耗时也容易遗漏,因此采用外部模式来处理比较方便。本文介绍批量删除某些图层中的体对象和曲线对象。

GimiGimmy 3035

Java——数组实例(冒泡、选择、插入、快速排序算法)

二维数组的应用(四种常见的简单排序算法): 冒泡排序法(从后往前); 选择排序算法; 直接插入排序法; 快速排序; 求一组数中的最大值和最小值;

Best_Basic的博客 7431

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java数组冒泡,选择,插入三种常用排序法及自带的快速排序法

int[] arr = { 4, 9, 8, 7, 8, 5, 1, 9, 88 };bubbleSort(arr);// selectSort(arr);// insertSort(arr);System.out.println(Arrays.toString(arr));1.冒泡排序冒泡排序广泛用于数组排序,大致原理就是从第一个数开始,通过和后面一个数相比较,将较大的往后挪,一一比较之后,将最

毒王的博客 1758

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java实现一维数组排序(冒泡、选择、插入、Arrays类)

一、冒泡排序 每次遍历中,对两个相邻的元素进行比较交换。 int temp; for(int i=0;i<array.length-1;i++) for(int j=0;j<array.length-1-i;j++) if(array[j]<array[j+1]) { temp=array[j]; array[j]=array[j+1]; array[j+1]=t

Universalera的博客 2440

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java排序法之冒泡、选择、插入 和java的二分查找法

java排序法之冒泡、选择、插入 和java的二分查找法 import java.util.Arrays; /* * 打印数组 * 冒泡、选择、排序 二分查找法 */ public class Array5 { public static void main(String[] args) { // System.out.println(searchIndex(66)); int[...

klz 371

一维数组三大排序方法的过程及代码详解:冒泡、选择、插入

从eclipse系统方法、三大排序方法(冒泡、选择、插入排序)这两方面,对一维数组排序的方式及过程代码进行了详解。

wlllltttt_50的博客 1773

JAVA中常见的四种排序--冒泡排序、选择排序、插入排序和快速排序 详解

1、排序的介绍 排序是将一群数据,按照指定的顺序进行排列的过程。 2、排序的分类 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序、选择排序和插入排序) 外部排序:数据量过大,无法加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法) 3、排序(Sorting)是数据处理中一种很重要的运算,同时也是很常见的运算,一般数据处理工作的25%的

zyj0813的博客 6265

三种基本排序方式(冒泡,直接插入,直接选择)

三种基本排序方式1.冒泡排序冒泡排序的原理冒泡排序的代码例子2.直接选择排序直接选择排序详解直接选择排序代码2.插入排序插入排序详解插入排序代码例子三种排序方法的对比 编写人:不知明日吹起何处之风 1.冒泡排序 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 冒泡排序的原理 图中,蓝色为...

weixin_44142470的博客 2694

JAVA数组的排序(选择排序,冒泡排序,插入排序,计数排序)

一.选择排序 1.基本原理 假设要按升序排列一个数列。选择排序法先找到数列中最小的数,然后将它和第一个元素交换。接下来,在剩下的数中找到最小数,将它和第二个元素交换,依此类推,直到数列中仅剩一个数为止。 2.排序过程 以数组{49,38,65,97,76,13,27,49}为例: 第一次 : [13, 38, 65, 97, 76, 49, 27, 49] 第二次 : ...

qq_45824565的博客 613

数组的冒泡排序和插入排序

目录 一、引入 二、冒泡排序(最大筛选排序法) 三、插入排序 一、引入 在Java中,数组是一项很重要的概念,不过既然是数组,最基本的数组就是数字组成的数组,自然就离不开数字的比较大小与排序,当然,数组排序的方式有很多,本篇主要研究数组的冒泡排序与插入排序。 二、冒泡排序(最大筛选排序法) 冒泡排序,顾名思义,是用气泡在液体中上升时逐渐变大的状态来命名的,十分形象,当然冒泡...

Liuxiaoyang1999的博客 538

冒泡排序c语言标准代码,C语言实现冒泡排序法和选择排序法代码参考

为了易用,我编写排序函数,这和直接在主调函数中用是差不多的。我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误!冒泡排序法void sort(int * ar,int k) //ar指向数组名,k是元素个数{int i,j,temp;; i < k - ; i++){ //比较k-1趟就可以了; j < k - i -; j++){]){temp = ...

weixin_42098104的博客 2281

【java排序】:基本的三种排序方法(冒泡、插入、选择)

三大基本排序:冒泡、插入、选择,欢迎大家观看学习,有错误及时指正!

嵌入式up 1015

数组的四种排序方法介绍

欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。最近在学习和练习一些算法方面的知识,发现在java中运用...

算法与编程之美 1万+

【java】冒泡排序法、选择排序法、插入排序法

排序是数据处理中一种很重要的运算,同时也是很常见的运算,一般数据处理工作25%的时间都在进行排序。简单的说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。

fragile_spume的博客 598

java实现冒泡、选择、插入排序算法

package xiaoneiwang; public class Test { public static void main(String[] agrs){ //插入排序算法 int[] arr = {10,1,90,7,23,6,2,34}; //假设第一个数是一个有序数组 //拿后面的每一个数往这个数组插入 int[]

TheBetterMe的专栏 585

数据结构之常用排序算法(冒泡、选择等)

学会常用排序算法,包括冒泡排序、选择排序、插入排序、归并排序,希尔排序和基数排序

weixin_44885503的博客 1021
上一篇: Java类加载器之管理资源和配置文件
下一篇: JavaBean和BeanUtils工具包的应用
marching21
博客等级 码龄12年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值