首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java - Bubble排序行为奇怪

Bubble排序是一种简单的排序算法,它通过多次交换相邻元素的位置来实现排序。在每一轮的排序过程中,相邻的元素会进行比较,如果顺序不正确,则交换它们的位置。这个过程会一直重复,直到所有元素都按照正确的顺序排列。

然而,Bubble排序在某些情况下可能表现出奇怪的行为。具体来说,当待排序的数组已经部分有序时,Bubble排序的效率会显著下降。这是因为Bubble排序每次只交换相邻元素,而不会跳过已经有序的部分。因此,在有序部分之后的元素需要经过多次交换才能到达正确的位置,导致排序效率低下。

为了解决Bubble排序的低效问题,可以采用以下优化措施:

  1. 设置一个标志位,记录每一轮排序中是否进行了交换操作。如果某一轮排序中没有进行任何交换,说明数组已经完全有序,可以提前结束排序过程。
  2. 在每一轮排序中,记录最后一次交换的位置。这个位置之后的元素已经有序,下一轮排序时可以直接跳过这部分元素。

Bubble排序的时间复杂度为O(n^2),其中n是待排序数组的长度。尽管Bubble排序在某些情况下表现出奇怪的行为,但它仍然是一种简单易懂的排序算法,适用于小规模数据的排序。

腾讯云提供了多种云计算相关产品,可以帮助开发者进行应用部署、数据存储和计算等操作。以下是一些推荐的腾讯云产品和产品介绍链接地址,可以在云计算领域的开发中使用:

  1. 云服务器(Elastic Cloud Server,ECS):提供可弹性伸缩的云服务器实例,支持多种操作系统和应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(TencentDB for MySQL):提供高性能、可扩展的云数据库服务,适用于各种规模的应用程序。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 人工智能平台(AI Platform):提供丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

冒泡排序Bubble Sort)

文章目录 算法描述 动图演示 代码实现 算法分析 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。...走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法描述 比较相邻的元素。...如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成...代码实现 下面的排序算法统一使用的测试代码如下,源码GitHub链接 public static void main(String[] args) { int[] array = {3, 44,...* * @param array 需要排序的数组 * @author JourWon * @date 2019/7/11 9:54 */ public static void bubbleSort(int

36820

冒泡排序算法(Bubble Sort)

【冒泡排序算法基本思想和案例】 冒泡排序:          对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组的前面,把大的元素移动到          数组的后面(也就是交换两个元素的位置...案例:          初始数组资源【63    4    24    1    3    15】 算法主要代码: // 定义方法实现数组的冒泡排序算法 public static void bubbleSort...】 * 冒泡排序: * 对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组的前面,把大的元素移动到 * 数组的后面(也就是交换两个元素的位置),这样数组元素就像气泡一样从底部上升到顶部。...{ public static void main(String[] args) { int[] array = {63, 4, 24, 1, 3, 15}; System.out.println("排序前...array) { System.out.print(i + "\t"); } System.out.println(); bubbleSort(array); System.out.println("排序

66220

交换排序—冒泡排序Bubble Sort)

基本思想: 最简单的排序,也是最耗时间的排序 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。...即:每当两相邻的数比较后发现它们的排序排序要求相反时,就将它们互换。 冒泡排序的示例: ?...对冒泡排序常见的改进方法是加入一标志性变量exchange,用于标志某一趟排序过程中是否有数据交换,如果进行某一趟排序时并没有进行数据交换,则说明数据已经按要求排列好,可立即结束排序,避免不必要的比较过程...改进后算法如下: void Bubble_1 ( int r[], int n) { int i= n -1; //初始时,最后位置保持不变 while ( i> 0) { int pos=...改进后的算法实现为: void Bubble_2 ( int r[], int n){ int low = 0; int high= n -1; //设置变量的初始值 int tmp,j; while

87120

1.冒泡排序Bubble Sort)

算法简介 冒泡排序Bubble Sort),是一种计算机科学领域的较简单的排序算法。...算法原理 冒泡排序算法的原理是: 重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。...排序算法的内存消耗 可用空间复杂度衡量,原地排序(Sorted in place)特指空间复杂度是O(1)的排序算法。...排序算法的稳定性 如1(A),2,3,4,5,1(B),排序后保持1(A),1(B),2,3,4,5,即1(A)仍在1(B)左边,那这个就是稳定的排序算法;反之为不稳定的排序算法。...排序的过程就是增加有序度减少逆序度的过程,直到达到满有序度,排序完成。 冒泡排序时间复杂度分析 冒泡排序包含2个操作原子,比较和交换。每交换一次,有序度加1。

1.1K10

房上的猫:经典排序算法 - 冒泡排序Bubble sort

原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,以此类推 例子为从小到大排序..., 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态| 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态...| 5 | 6 | 9 | 第五次两两比较,6 < 9不交换 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 | 第二趟排序...| 5 | 6 | 9 | 第四次两两比较,5 < 6不交换 交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 | 第三趟排序...(外循环)无交换 第五趟排序(外循环)无交换 排序完毕,输出最终结果1 2 4 5 6 9 动态图演示: ?

784100

java冒泡排序代码_Java冒泡排序

一、冒泡排序: 利用冒泡排序对数组进行排序 二、基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。...四、java代码实现: package 冒泡排序; import java.util.Arrays; /** * 冒泡排序 * @author chen * */ public class BubbleSort...六、算法优化: 冒泡排序法存在的不足及改进方法: 第一,在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位flag,将其初始值设置为非...在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序; package 冒泡排序; import java.util.Arrays; /** * 冒泡排序改进版...由于局部冒泡排序和冒泡排序的数据移动次数总是相同的,而局部冒泡排序所需关键字的比较次数常少于冒泡排序,这意味着局部冒泡排序很可能在平均比较次数上对冒泡排序有所改进,当比较次数较少的优点不足以抵消其程序复杂度所带来的额外开销

1.8K61

java链表排序方法_java链表排序

插入排序 对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。...对于归并排序排序在数组排序中的运用,详细请点击此处。...这里主要介绍归并排序在链表排序中的运用。...在使用归并排序算法进行链表排序时,其基本思想是将链表细分成一个个子链表,将子链表进行排序,然后再将相邻的两个有序子链表进行合并,得到更长的有序链表,最后一步步得到整个有序链表,子链表进行合并排序时需要用到合并两个有序链表算法

96310

快速排序Java实现_快速排序实现java

高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...最终将会得到这样的序列,如下 1 2 3 4 5 6 7 8 9 10 到此,排序完全结束。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。

1.3K10

java冒泡排序经典代码_java冒泡排序

经典算法——冒泡排序(Bubble Sort) 一、示例代码(伸手党看这里) 1.示例一 importjava.util.Arrays;public classBubbleSort {public static...int temp; /*临时变量,交换数据时使用*/ int length =arr.length;for(int p = length-1; p > 0; p–){ /*需要进行N-1(数组长度减一)趟排序...*/ for(int i = 0; i arr[i+1]){//进行位置交换 temp =arr[i]; arr[i]= arr[i+1...在使用冒泡排序的时候有可能会遇到这样一种情况:某一趟排序从头到尾,数组中的数字都没有发生位置交换。 那么上面这种情况说明了什么呢?说明了在经过上一趟的排序后,整个数组就已经被排好序了。...这么说的话原来计划的N-1趟排序我们是不是可以不用跑满了?是的!

74120

Java 冒泡排序

- 1; i++) {// 外循环控制排序的趟数 for (int j = 0; j < list.length - i - 1; j++) {// 内循环控制每一趟排序多少次...,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数 (2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值...(3)时间复杂度 1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。...2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: ?...image.png 综上所述:冒泡排序总的平均时间复杂度为:O(n2) ,时间复杂度和数据状况无关。

57020

java冒泡排序和快速排序

下面我们来看看java中的Arrays.sort(int []a)方法是怎么实现的。 ---- 二、快速排序 java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序。...快速排序主要是对哪些基本类型数据(int,short,long等)排序, 而合并排序用于对对象类型进行排序。 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。...这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序排列。...1.实现原理 java1.7之后的版本,开始用双轴快排取代了以前的排序算法,现在只实现了8种基本数据类型性的双轴快排,对象的排序在1.7中还在用老式的,不过都标了过时,估计以后版本中就会被新的双轴快排取代了...尽管插入排序的时间复杂度为0(n^2),但是当数组元素较少时,插入排序优于快速排序,因为这时快速排序的递归操作影响性能。   2)较好的选择了划分元(基准元素)。

1.2K30

Java设计模式---行为型模式

本章Java设计模式的行为型模式的介绍,是通过学习视频记录的笔记,欢迎留言指出错误点1....一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,可将每个条件分支移入它们各自的策略类中以代替这些条件语句。系统中各算法彼此完全独立,且要求对客户隐藏具体算法的实现细节时。...多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为。...(Context)     抽象状态角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为(LiftState)     具体状态角色:实现抽象状态所对应的行为(OpenningState ClosingState...RunningState StoppingState)使用场景:当一个对象的行为取决于他的状态,并且他必须在运行时根据状态改变他的行为时,就可以考虑使用状态模式一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时

7510
领券