Java 冒泡排序、快速排序实例代码

 更新时间:2017年05月05日 13:55:44   作者:牛头人  
这篇文章主要介绍了Java 冒泡排序、快速排序实例代码,需要的朋友可以参考下

冒泡排序

  冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序的算法实现如下:【排序后,数组从小到大排列】 

  /**
  * 冒泡排序
  * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 
  * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 
  * 针对所有的元素重复以上的步骤,除了最后一个。
  * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 
  * @param numbers 需要排序的整型数组
  */
 public static void bubbleSort(int[] numbers)
 {
  int temp = 0;
  int size = numbers.length;
  for(int i = 0 ; i < size-1; i ++)
  {
  for(int j = 0 ;j < size-1-i ; j++)
  {
   if(numbers[j] > numbers[j+1]) //交换两数位置
   {
   temp = numbers[j];
   numbers[j] = numbers[j+1];
   numbers[j+1] = temp;
   }
  }
  }
 }

快速排序

快速排序的基本思想:

         通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

  把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

代码实现如下:

1.查找中轴(最低位作为中轴)所在位置

  /**
  * 查找出中轴(默认是最低位low)的在numbers数组排序后所在位置
  * 
  * @param numbers 带查找数组
  * @param low 开始位置
  * @param high 结束位置
  * @return 中轴所在位置
  */
 public static int getMiddle(int[] numbers, int low,int high)
 {
  int temp = numbers[low]; //数组的第一个作为中轴
  while(low < high)
  {
  while(low < high && numbers[high] > temp)
  {
   high--;
  }
  numbers[low] = numbers[high];//比中轴小的记录移到低端
  while(low < high && numbers[low] < temp)
  {
   low++;
  }
  numbers[high] = numbers[low] ; //比中轴大的记录移到高端
  }
  numbers[low] = temp ; //中轴记录到尾
  return low ; // 返回中轴的位置
 }

2、 递归形式的分治排序算法:

 /**
  * 
  * @param numbers 带排序数组
  * @param low 开始位置
  * @param high 结束位置
  */
 public static void quickSort(int[] numbers,int low,int high)
 {
  if(low < high)
  {
    int middle = getMiddle(numbers,low,high); //将numbers数组进行一分为二
    quickSort(numbers, low, middle-1); //对低字段表进行递归排序
    quickSort(numbers, middle+1, high); //对高字段表进行递归排序
  }
 }

3、快速排序提供方法调用

 /**
  * 快速排序
  * @param numbers 带排序数组
  */
 public static void quick(int[] numbers)
 {
  if(numbers.length > 0) //查看数组是否为空
  {
  quickSort(numbers, 0, numbers.length-1);
  }
 }

分析:

  快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。但若初始序列按关键码有序或基本有序时,快排序反而蜕化为冒泡排序。为改进之,通常以“三者取中法”来选取基准记录,即将排序区间的两个端点与中点三个记录关键码居中的调整为支点记录。快速排序是一个不稳定的排序方法。

 方法测试

打印函数:

public static void printArr(int[] numbers)
 {
  for(int i = 0 ; i < numbers.length ; i ++ )
  {
  System.out.print(numbers[i] + ",");
  }
  System.out.println("");
 }

测试:

 public static void main(String[] args) 
 {
  int[] numbers = {10,20,15,0,6,7,2,1,-5,55};
  System.out.print("排序前:");
  printArr(numbers);
  bubbleSort(numbers);
  System.out.print("冒泡排序后:");
  printArr(numbers);
  quick(numbers);
  System.out.print("快速排序后:");
  printArr(numbers);
 }

结果:

排序前:10,20,15,0,6,7,2,1,-5,55,

冒泡排序后:-5,0,1,2,6,7,10,15,20,55,

快速排序后:-5,0,1,2,6,7,10,15,20,55,

以上所述是小编给大家介绍的Java 冒泡排序、快速排序实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Spring思维导图助你轻松学习Spring

    Spring思维导图助你轻松学习Spring

    这篇文章主要为大家详细介绍了Spring思维导图,帮助你轻松学习Spring的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java数组越界问题实例解析

    Java数组越界问题实例解析

    这篇文章主要介绍了Java数组越界问题实例解析,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • java 判断二进制文件的方法

    java 判断二进制文件的方法

    这篇文章主要介绍了java 判断二进制文件的方法的相关资料,这里提供实例来实现判断文件是否问二进制文件,希望能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • SpringBoot使用Kafka来优化接口请求的并发方式

    SpringBoot使用Kafka来优化接口请求的并发方式

    这篇文章主要介绍了SpringBoot使用Kafka来优化接口请求的并发方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot实现RabbitMQ监听消息的四种方式

    SpringBoot实现RabbitMQ监听消息的四种方式

    本文介绍了在Spring Boot中实现RabbitMQ监听消息的几种方式,包括使用@RabbitListener注解、MessageListenerAdapter、配置连接工厂和队列等方式,感兴趣的可以了解一下
    2024-07-07
  • java如何获取yml配置文件工具类

    java如何获取yml配置文件工具类

    本文介绍了java获取yml配置文件的工具类引入pom文件的方法,首先,创建一个与工具类同名的类,然后将工具类的代码复制到新创建的类中,运行后输出:0*/1***?完成操作,此方法简单易行,适合初学者使用
    2024-10-10
  • Windows环境使用bat脚本启动Java服务的过程

    Windows环境使用bat脚本启动Java服务的过程

    Java项目一般会被打包成jar后启动,在windows系统中可以通过终端窗口cmd启动jar包,即在jar包所在的目录中打开cmd,或在cmd中进入到jar包目录,这篇文章主要介绍了Windows环境使用bat脚本启动Java服务,需要的朋友可以参考下
    2023-08-08
  • Java多种经典排序算法(含动态图)

    Java多种经典排序算法(含动态图)

    排序算法是老生常谈的了,但是在面试中也有会被问到,例如有时候,在考察算法能力的时候,不让你写算法,就让你描述一下,某个排序算法的思想以及时间复杂度或空间复杂度。我就遇到过,直接问快排的,所以这次我就总结梳理一下经典的十大排序算法以及它们的模板代码
    2021-04-04
  • Mybatis Plus ActiveRecord模式的具体使用

    Mybatis Plus ActiveRecord模式的具体使用

    ActiveRecord 是一种设计模式,它是一种在软件开发中用于管理关系数据库的模式,本文主要介绍了Mybatis Plus ActiveRecord模式的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • SpringBoot读取配置文件的四种方式

    SpringBoot读取配置文件的四种方式

    在 Spring Boot 中,application.yml 文件用于配置应用程序的属性,Spring Boot 默认会从 src/main/resources 目录下的 application.properties 或 application.yml 文件中读取配置,本文介绍了SpringBoot读取配置文件的四种方式,需要的朋友可以参考下
    2024-08-08

最新评论