冒泡排序之升华版

2024-09-02 04:38
文章标签 冒泡排序 升华

本文主要是介绍冒泡排序之升华版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.冒泡算法是依次比较两个相邻的位置,如果不符合规则,则交换,比较完这一趟后,在接着比较下一趟。

用程序实现是这样的

public static void main(String[] args) {int[] arr = new int[]{3,2,1,7,8,9};maoPao(arr);
}public static void maoPao(int[] arr) {boolean sorted = true;for (int i = 0; i < arr.length; i++) {	System.out.println("第"+(i+1)+"趟");for (int j = 0; j < arr.length-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr,j,j+1);	}System.out.println("第"+j+"次"+Arrays.toString(arr));}System.out.println("第"+(i+1)+"趟后"+Arrays.toString(arr));System.out.println();}
}//交换两个数的位置
public static void swap(int[] arr, int i,int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}

运行结果如下

第1趟
第0次[2, 3, 1, 7, 8, 9]
第1次[2, 1, 3, 7, 8, 9]
第2次[2, 1, 3, 7, 8, 9]
第3次[2, 1, 3, 7, 8, 9]
第4次[2, 1, 3, 7, 8, 9]
第1趟后[2, 1, 3, 7, 8, 9]


第2趟
第0次[1, 2, 3, 7, 8, 9]
第1次[1, 2, 3, 7, 8, 9]
第2次[1, 2, 3, 7, 8, 9]
第3次[1, 2, 3, 7, 8, 9]
第2趟后[1, 2, 3, 7, 8, 9]


第3趟
第0次[1, 2, 3, 7, 8, 9]
第1次[1, 2, 3, 7, 8, 9]
第2次[1, 2, 3, 7, 8, 9]
第3趟后[1, 2, 3, 7, 8, 9]


第4趟
第0次[1, 2, 3, 7, 8, 9]
第1次[1, 2, 3, 7, 8, 9]
第4趟后[1, 2, 3, 7, 8, 9]


第5趟
第0次[1, 2, 3, 7, 8, 9]
第5趟后[1, 2, 3, 7, 8, 9]


第6趟
第6趟后[1, 2, 3, 7, 8, 9]

但是这种情况又缺陷,做了好多无用功,在第二趟之后,已经实现顺序排列了,就没必要排序了,于是升华一下代码。

2.升华篇

public static void main(String[] args) {int[] arr = new int[]{3,2,1,7,8,9};maoPao(arr);
}public static void maoPao(int[] arr) {boolean sorted = true;for (int i = 0; i < arr.length; i++) {sorted = true;//假定有序System.out.println("第"+(i+1)+"趟");for (int j = 0; j < arr.length-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr,j,j+1);sorted = false;//假定失败}System.out.println("第"+j+"次"+Arrays.toString(arr));}if (sorted) {//减少趟数break;}System.out.println("第"+(i+1)+"趟后"+Arrays.toString(arr));System.out.println();}
}//交换两个数的位置
public static void swap(int[] arr, int i,int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}
运行结果如下

第1趟
第0次[2, 3, 1, 7, 8, 9]
第1次[2, 1, 3, 7, 8, 9]
第2次[2, 1, 3, 7, 8, 9]
第3次[2, 1, 3, 7, 8, 9]
第4次[2, 1, 3, 7, 8, 9]
第1趟后[2, 1, 3, 7, 8, 9]


第2趟
第0次[1, 2, 3, 7, 8, 9]
第1次[1, 2, 3, 7, 8, 9]
第2次[1, 2, 3, 7, 8, 9]
第3次[1, 2, 3, 7, 8, 9]
第2趟后[1, 2, 3, 7, 8, 9]


第3趟
第0次[1, 2, 3, 7, 8, 9]
第1次[1, 2, 3, 7, 8, 9]
第2次[1, 2, 3, 7, 8, 9]
这个只运行了3趟,减少了循环的次数。



这篇关于冒泡排序之升华版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129017

相关文章

冒泡排序——基于Java的实现

简介    冒泡排序(Bubble Sort)是一种简单的排序算法,适用于小规模数据集。其基本思想是通过重复遍历待排序的数组,比较相邻的元素并交换它们的位置,以此将较大的元素逐步“冒泡”到数组的末尾。算法的名称源于其运行过程中,较大的元素像水中的大气泡一样逐渐浮到顶部。  排序过程   for (int i = 0; i < num.length - 1; i++) {

BubbleSort(冒泡排序)

平均时间 复杂度 最差时间 复杂度 最佳时间 复杂度 空间复杂度 O(n^2) O(n^2) O(n) O(1) 稳定 public static void bubbleSort( int[] arr ) {if( arr == null | arr.length < 2 ) {return;}for( int j = arr.length - 1; j > 0;

冒泡排序【BubbleSort】

冒泡排序 假设初始的数组是[5,4,7,2] 以从小到大排序为例: 将第0个元素与第一个元素进行比较, 5 > 4, 所以交换位置, 此时[4,5,7,2] 将第1个元素与第二个元素进行比较, 5 < 7, 所以保持,此时[4,5,7,2] 将第2个元素与第三个元素进行比较, 7 > 2, 所以交换位置, 此时[4,5,2,7] 这样就经过了一轮的冒泡,最后一个元素就是最大的元素了。

冒泡排序和鸡尾酒排序(code)

昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一、冒泡排序 # 冒泡排序class BubbleSort(object):def __init__(self, data_list):self.data_list = data_listself.length = len(data_list)# 简单粗暴的排序方式def b_sort(self):d

冒泡排序算法及其简单优化(基于Java)

冒泡排序算法通过多次比较和交换来实现排序,其流程如下: (1)对数组中的各数据,依次比较相邻两个元素的大小。 (2)如果前面的数据大于后面的数据,就交换这两个数据。通过第一轮的多次比较排序后,便可将最小的数据排好。 (3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组的各数据。 所谓“冒泡”,就是大数沉下去(数组的底部),小数相应的浮上来(数组的顶部)。

Java基础07 数组算法(顺序查找、冒泡排序、选择排序、二分查找)

超详细的Java知识点路线图 前言 知道了怎么使用数组后,还需要结合数组和前面的知识,解决某些实际的问题。 本文我们将学习数组的常用算法:求最大值、顺序查找、二分查找、冒泡排序、选择排序。 如果能掌握这些算法,那么大家的编程能力会得到很大增强哦。 求最大值 给定一个数组,求出所有数据中最大(最小)的数据 算法描述: 定义最大值变量,将数组中第一个数据赋值给最大值从数组的第二个数据开始

android 算法可视化(1) --冒泡排序可视化实现

前言 以前写了很多算法相关的博客,每篇博客都会用word或者processing画上很多图,非常浪费时间,那时候就一直有考虑能不能使用程序来实现这种过程,不仅不用自己画那么图,而且编程实现可视化的话,还可以动态更清晰的表现算法的过程。于是查找了相关的资料和自己对算法的理解先实现一个冒泡排序的可视化,代码是Android的。 效果 实现 要实现这个动画效果,实际上需要两个基本的模块组成:

冒泡排序;选择排序;插入排序;快排;判断大小端;位运算

1.冒泡排序:基础        时间复杂度来说:o(n^2) 从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 #include <stdio.h>int main(void){int str[32] = 0;int i = 0;int j = 0;int len = sizeof(str) / sizeof(str[0]);

排序算法(动图详细讲解)(直接插入排序,希尔排序,堆排序,冒泡排序)

前言:         排序的方式有很多种,不同的排序思想是不一样的。         但是排序的时间复杂度和空间复杂度也都有区别。         例如:         最简单的冒泡排序,时间复杂度为O(N)         对排序的时间复杂度为O(N*logN)。 接下来就来仔细分析每种排序的思路,并写出代码。 插入排序:  基本思想:         直接插入排序是一种简

内部排序之二:冒泡排序和选择排序

前言    之所以把冒泡排序和选择排序放在一起,是因为二者的实现代码很相似,而且都是最基本的排序方式,非常容易理解和实现。当然,如果仅仅是为了讲述这两种排序方式,那也根本没必要写这篇博文了。和上篇博文一样,我会在冒泡排序和选择排序原始代码的基础上给出一些改进和优化,这才是本文的重点所在。 原始冒泡排序    冒泡排序的思想很简单,如果要求排序后序列中元素按照从小到大的顺序排列,则冒泡