java学习:四大排序

冒泡排序:1.比较相邻的元素如果第一个比第二个大,就交换它们两个;

2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对;

3.重复以上步骤,直至完成。

java 复制代码
public static void bubbleSort(int[] arr){
    for(int j=0;j<arr.length;j++){
        for(int i=0;i<arr.length-1;i++){
            if(arr[i]>arr[i+1]){
                int temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;            
            }        
        }
    }
}
public static void main(String[] args){
        int[] arr={5,7,4,2,0,3,1,6};
        bubbleSort(arr);
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

定义一个指针i,让i于相邻的元素i+1经行对比,一整轮下来就可以确定一个固定的元素:

java 复制代码
for(int i=0;i<arr.length-1;i++){//一次循环确定一个有序的数
            if(arr[i]>arr[i+1]){
                int temp=arr[i];//交换操作
                arr[i]=arr[i+1];
                arr[i+1]=temp;            
            }        
        }

一共有n个元素所以需要n轮:

java 复制代码
for(int j=0;j<arr.length;j++)

简单选择排序:开始定义一个最小值的位置,然后遍历剩余的n-1给元素找到一个小于这个值的与之交换。

开始的时候我们定义一个最小值j,j指针指向该值的序号如图j=0;定义一个新指针i去寻找剩余的值中的最小值。

找到之后另这两个值经行交换:

j自增1,这时就有一个有序的数,接下来重复该过程。

java 复制代码
public static void sort(int[] arr){
    for(int j=0;j<arr.length;j++){
        int minIndex=j;//定义一个最小值下标为j;
        for(int i=j+1;i<arr.length;i++){
            if(arr[i]<arr[minIndex]){
                minIndex=i; //更新最小值下标。           
            }                    
        }
        int temp=arr[j];
        arr[j]=arr[minIndex];
        arr[minIndex]=temp;    
    }
}

插入排序:

从数组第二个元素开始,将其视为待插入的元素,我们用j来指代,让改元素于前边的元素进行对比;

现在数组arr0,arr1有序,将待排顺序数组arr2于前两个经行对比

重复该过程。

java 复制代码
public static void sort(int[] arr){
    for(int j=1;j<arr.length;j++){
        for(int i=j-1;i>=0;i--){
            if(arr[i]>arr[i+1]){
                int temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;            
            }        
        }    
    }
}

希尔排序:

  1. 选择一个增量序列(如 1, 4, 13, 40...),增量逐渐减小到 1。
  2. 对于每个增量 h,将数组分割成 h 个子数组,每个子数组包含位置相差 h 的元素。
  3. 对每个子数组执行插入排序。
  4. 减小增量 h,重复步骤 2-3,直到 h=1。
  5. 当 h=1 时,整个数组被视为一个子数组,执行最后一次插入排序,完成排序。
java 复制代码
public static void sort(int[] arr){
    for(int h=arr.length/2;h>=1;h/=2){
        for(int j=h;j<arr.length;j++){
            for(int i=j-h;i>=0;i-=h){
                if(arr[i]>arr[i+h]){
                    int temp=arr[i];
                    arr[i]=arr[i+h];
                    arr[i+h]=temp;                
                }            
            }        
        }    
    }
}
相关推荐
一路向北North9 分钟前
Spring Security OAuth2.0(22):分布式系统授权-搭建网关
java·后端·spring
存在的五月雨14 分钟前
SpringBoot后端限制重复提交
java·spring boot·后端
xianrenli3816 分钟前
Android14自动时区更新
android·学习·framework·aosp14·自动时区
Sam_Deep_Thinking31 分钟前
一次线程池线上故障复盘:四层防线如何避免数据丢失
java·面试·程序员
paopaokaka_luck32 分钟前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端
前鼻音太阳熊1 小时前
【MES系统】MES为什么需要SSE?从设备实时监控谈Spring Boot流式推送设计
java·spring boot·后端
Lhappy嘻嘻1 小时前
网络初识|基础入门:局域网广域网、IP 端口、TCP/IP 五层模型与封装解封装全过程
java·开发语言·网络·笔记·网络协议·tcp/ip
Java面试题总结1 小时前
区间树:反向映射的前置数据结构
java·前端·数据结构
LiaoWL1231 小时前
【SpringCloud合集-06】Spring Cloud Gateway网关学习笔记
笔记·学习·spring cloud
尚早立志1 小时前
六)Spring Boot 源码研读之prepareContext 准备上下文
java·spring boot·后端·spring