全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java简单冒泡排序实例解析

一、算法原理

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

二、实现思路

用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,n-1,对于每一个i,j的值依次为0,1,2,...n-i 。

设数组长度为N:

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

三、代码实现

package sort;
import java.util.Arrays;
/**
 * 冒泡排序
 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
 * 针对所有的元素重复以上的步骤,除了最后一个。
 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
 */

public class BubbleSort {
  public static void bubbleSort(int[] arr) {
    boolean flag=true;
    while (flag) {
      flag=false;
      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;
            flag=true;
          }
        }
        if (!flag){
          break;
        }
        }
      }
    }
  public static void main(String[] args){
    int a[]=new int[]{345,22,43,12,65,335,124,636,3};
    BubbleSort.bubbleSort(a);
    System.out.print(Arrays.toString(a));
  }
}

 四、性能分析

若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。

五、算法优化

冒泡排序法存在的不足及改进方法:

第一、在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位flag,将其初始值设置为true,表示被排序的表是一个无序的表,每一次排序开始前设置flag值为true,在进行数据交换时,修改flag为false。在新一轮排序开始时,检查此标志,若此标志为false,表示上一次没有做过交换数据,则结束排序;否则进行排序;

第二、在冒泡排序中,一趟扫描有可能无数据交换,也有可能有一次或多次数据交换,在传统的冒泡排序算法及近年来的一些改进的算法中,只记录一趟扫描有无数据交换的信息,对数据交换发生的位置信息则不予处理。为了充分利用这一信息,可以在一趟全局扫描中,对每一反序数据对进行局部冒泡排序处理,称之为局部冒泡排序。局部冒泡排序与冒泡排序算法具有相同的时间复杂度,并且在正序和逆序的情况下,所需的关键字的比较次数和移动次数完全相同。由于局部冒泡排序和冒泡排序的数据移动次数总是相同的,而局部冒泡排序所需关键字的比较次数常少于冒泡排序,这意味着局部冒泡排序很可能在平均比较次数上对冒泡排序有所改进,当比较次数较少的优点不足以抵消其程序复杂度所带来的额外开销,而当数据量较大时,局部冒泡排序的时间性能则明显优于冒泡排序。对于N个无序数据,我们在进行一趟冒泡排序时,如果第k个数据和第k+1个数据逆序,那么对第k+1个数据进行一趟向前的冒泡排序,使其移动到合适的位置,也就是说让前面k+1个数据调节为正序。因为这种冒泡法只对前k+1个数据冒泡处理,所以我们称它为——局部冒泡 

package sort;

import java.util.Arrays;

public class BubbleSort {
  public static void bubbleSort(int[] arr) {
    boolean flag=true;
    while (flag) {
      flag=false;
      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;
            flag=true;
          }
        }
        if (!flag){
          break;
        }
        }
      }
    }
  public static void main(String[] args){
    int a[]=new int[]{345,22,43,12,65,335,124,636,3};
    BubbleSort.bubbleSort(a);
    System.out.print(Arrays.toString(a));
  }
}

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


# java  # 冒泡排序  # Java算法之冒泡排序实例代码  # 详解Java冒泡排序  # Java冒泡排序简单实现  # java 算法之冒泡排序实例详解  # java List 排序之冒泡排序实例代码  # java数据结构与算法之冒泡排序详解  # java冒泡排序简单实例  # java实现的冒泡排序算法示例  # Java实现冒泡排序算法  # Java简单冒泡排序示例解析  # 数据交换  # 这一  # 第一个  # 在这  # 没有任何  # 只需  # 设为  # 所需  # 第二个  # 二个  # 依次为  # 越少  # 过程中  # 都是  # 是一个  # 对越  # 也有  # 有可能  # 遍历  # 将其 


相关文章: 网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  小建面朝正北,A点实际方位是否存在偏差?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何基于云服务器快速搭建个人网站?  建站之星如何助力企业快速打造五合一网站?  Thinkphp 中 distinct 的用法解析  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何通过VPS建站实现广告与增值服务盈利?  PHP 500报错的快速解决方法  如何高效完成独享虚拟主机建站?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何快速使用云服务器搭建个人网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  公司网站制作需要多少钱,找人做公司网站需要多少钱?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何在云服务器上快速搭建个人网站?  南平网站制作公司,2025年南平市事业单位报名时间?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  建站之星CMS五站合一模板配置与SEO优化指南  宝塔面板如何快速创建新站点?  网站制作公司排行榜,抖音怎样做个人官方网站  如何用低价快速搭建高质量网站?  建站之星如何防范黑客攻击与数据泄露?  b2c电商网站制作流程,b2c水平综合的电商平台?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  如何构建满足综合性能需求的优质建站方案?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何在腾讯云免费申请建站?  Android自定义listview布局实现上拉加载下拉刷新功能  香港服务器租用费用高吗?如何避免常见误区?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何快速搭建高效WAP手机网站吸引移动用户?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  建站主机SSH密钥生成步骤及常见问题解答?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  建站之星安装步骤有哪些常见问题?  网站专业制作公司有哪些,做一个公司网站要多少钱?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  网站网页制作专业公司,怎样制作自己的网页?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  招商网站制作流程,网站招商广告语?  如何用搬瓦工VPS快速搭建个人网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。