Java冒泡排序法和选择排序法的实现

 更新时间:2019年09月12日 09:56:43   作者:神经大条蕾弟  
这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

冒泡排序法和选择排序法

本人学生党一枚。Java学习过程,写这个博客纯属当复习,有什么错误的地方请大家指出来在评论里指点指点我。谢谢

冒泡排序法

概念:

从前向后(或从后向前)依次比较相邻的元素,若发现逆顺序,则交换。小的向前换,大的向后换,像水底的气泡逐渐向上冒,顾名思义冒泡排序法。

通俗一点就是把大的往上挪!向冒泡一样。

是交换式排序法的一种。冒泡排序法效率较低。

冒泡过程

冒泡排序法思路

1:外层循环:控制它要走几次。
假设你有5个数,那就要走4次,最后一次不用走,最后那个数已经在它位置了所以就要length-1次。
2:内层循环:控制逐一比较,如果发现前一个数比后一个数大,则交换。
注意!因为越比较长度就越小了,所以长度要length-1-i。

package com.test_1;

public class Demo5_3 {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    int arr [ ] ={1,6,0,-1,9};
    int temp=0;//中间值
    //-------冒泡排序法
    //外层循环,它决定一共走几趟
    for(int i = 0;i<arr.length-1;i++){
      //内层循环,开始逐个比较
      //如果我们发现前一个数比后一个数大,则交换
      for(int j=0;j<arr.length-1-i;j++){
        if (arr[j]>arr[j+1]) {
          //换位
          temp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = temp;
        }
      }

    }
    //输出结果
    for(int i = 0;i<arr.length;i++){
      System.out.print(arr[i]);
    }

  }

}

选择排序法

概念:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。
通俗点说就是每次找到后面元素的最小值然后与之交换。
选择排序法效率中。

选择排序过程

选择排序思路
1:外层循环:要走几趟,同样是length-1。
2:设置一个最小值。假设第一个就是最小值。
3:设置一个最小值下标
4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。
5:退出内层循环后就交换位置。

package com.test_1;

public class Demo5_3 {

  public static void main(String[] args) {


    //简单测试数组
    int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

    //调用选择排序法
    Select select = new Select();
    select.sort(arr);
  }

}


//--------------选择排序法
class Select{
  public void sort(int arr[]){
    //中间值
    int temp = 0;

    //外循环:我认为最小的数,从0~长度-1
    for(int j = 0; j<arr.length-1;j++){
      //最小值:假设第一个数就是最小的
      int min = arr[j];
      //记录最小数的下标的
      int minIndex=j;

      //内循环:拿我认为的最小的数和后面的数一个个进行比较
      for(int k=j+1;k<arr.length;k++){
        //找到最小值
        if (min>arr[k]) {
          //修改最小
          min=arr[k];
          minIndex=k;
        }
      }
      //当退出内层循环就找到这次的最小值
      //交换位置
      temp = arr[j];
      arr[j]=arr[minIndex];
      arr[minIndex]=temp;
    }
    //输出结果
    for(int i = 0;i<arr.length;i++){
      System.out.print(arr[i]+"  ");
    }

  }
}

最后再比较一下两个排序法之间的效率差异:
代码

package com.test_1;

import java.util.Calendar;

public class Demo5_3 {

  public static void main(String[] args) {

    //构建一个庞大的无序数组用于测试时间
    int len=100000;
    int arr1 [] = new int [len];
    for(int i=0;i<len;i++){
      //让程序随机产生一个1~10000的数
      //Math.random()会产生一个0~1的数
      int t = (int)(Math.random()*10000);
      arr1[i] = t;
    }

    //简单测试数组
    int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};

    //获得时间实例
    Calendar cal = Calendar.getInstance();

    //在排序前打印系统时间
    System.out.println("冒泡排序法开始"+cal.getTime());
    //调用冒泡排序法
    Bubble bubble = new Bubble();
    bubble.sort(arr1);
    //重新获得时间实例
    cal = Calendar.getInstance();
    System.out.println("冒泡排序法结束"+cal.getTime());


    //重新获得时间实例
    cal = Calendar.getInstance();
    System.out.println("选择排序法开始"+cal.getTime());
    //调用选择排序法
    Select select = new Select();
    select.sort(arr1);
    //重新获得时间实例
    cal = Calendar.getInstance();
    System.out.println("选择排序法结束"+cal.getTime());
  }

}

//-----------------冒泡排序法
class Bubble{
  //排序方法
  public void sort(int arr[]){
    int temp=0;//中间值
    //-------冒泡排序法
    //外层循环,它决定一共走几趟
    for(int i = 0;i<arr.length-1;i++){
      //内层循环,决定每一趟循环的次数
      //如果我们发现前一个数比后一个数大,则交换
      for(int j=0;j<arr.length-1-i;j++){
        if (arr[j]>arr[j+1]) {
          //换位
          temp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = temp;
        }
      }

    }  
    /*//输出结果
        for(int i = 0;i<arr.length;i++){
          System.out.print(arr[i]+"  ");
        }*/
  }  
}


//--------------选择排序法
class Select
{
  public void sort(int arr[])
  {
    //中间值
    int temp = 0;

    //外循环:我认为最小的数,从0~长度-1
    for(int j = 0; j<arr.length-1;j++)
    {
      //最小值:假设第一个数就是最小的
      int min = arr[j];
      //记录最小数的下标的
      int minIndex=j;

      //内循环:拿我认为的最小的数和后面的数一个个进行比较找到下标
      for(int k=j+1;k<arr.length;k++)
      {
        //找到最小值
        if (min>arr[k]) 
        {
          //修改最小
          min=arr[k];
          minIndex=k;
        }
      }
      //当退出内层循环就找到这次的最小值
      //交换位置
      temp = arr[j];
      arr[j]=arr[minIndex];
      arr[minIndex]=temp;
    }
    /*//输出结果
    for(int i = 0;i<arr.length;i++){
      System.out.print(arr[i]+"  ");
    }*/

  }
}

运行结果:

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用自定义参数解析器同一个参数支持多种Content-Type

    使用自定义参数解析器同一个参数支持多种Content-Type

    这篇文章主要介绍了使用自定义参数解析器同一个参数支持多种Content-Type的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java常用工具类汇总 附示例代码

    Java常用工具类汇总 附示例代码

    这篇文章主要介绍了Java常用工具类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着我来一起学习学习吧,希望能给你带来帮助
    2021-06-06
  • Maven工程搭建spring boot+spring mvc+JPA的示例

    Maven工程搭建spring boot+spring mvc+JPA的示例

    本篇文章主要介绍了Maven工程搭建spring boot+spring mvc+JPA的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 使用jquery 的ajax 与 Java servlet的交互代码实例

    使用jquery 的ajax 与 Java servlet的交互代码实例

    这篇文章主要介绍了使用jquery 的ajax 与 Java servlet的交互代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 学习java编程后可以走哪些职业道路

    学习java编程后可以走哪些职业道路

    在本篇文章里给大家介绍了关于学习java后的职业道路,以及需要学习的相关知识内容,有兴趣的朋友们可以跟着学习下。
    2022-11-11
  • Spring的自定义扩展标签NamespaceHandler解析

    Spring的自定义扩展标签NamespaceHandler解析

    这篇文章主要介绍了Spring的自定义扩展标签NamespaceHandler解析,在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,Spring提供了可扩展Schema的支持,这是一个不错的折中方案,需要的朋友可以参考下
    2023-12-12
  • Spring Boot动态加载Jar包与动态配置实现

    Spring Boot动态加载Jar包与动态配置实现

    随着项目的不断演进和业务需求的增长,很多场景下需要实现系统的动态性和灵活性,本文主要介绍了Spring Boot动态加载Jar包与动态配置实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Netty分布式客户端接入流程初始化源码分析

    Netty分布式客户端接入流程初始化源码分析

    这篇文章主要介绍了Netty分布式客户端接入流程初始化源码分析,有关channelConfig有关的初始化过程剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

    Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

    今天小编就为大家分享一篇关于Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • springboot集成测试容器重启问题的处理

    springboot集成测试容器重启问题的处理

    这篇文章主要介绍了springboot集成测试容器重启问题的处理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论