java冒泡排序从大到小数组 java单例模式代码

气泡排序(1):假设一个int数组中有五个数字35、56、34、22和16。如何使用冒泡排序算法将输出从小到大排序?1.基本思想首先,从数组最左边的部分,取出位置0(左)和位置1(右)的数据。如果左边的数据比右边的数据大,就交换;否则,不要更换它们。接下来向右移动一个位置,取出第...

气泡排序(1):

假设一个int数组中有五个数字35、56、34、22和16。如何使用冒泡排序算法将输出从小到大排序?

1.基本思想

首先,从数组最左边的部分,取出位置0(左)和位置1(右)的数据。如果左边的数据比右边的数据大,就交换;否则,不要更换它们。接下来向右移动一个位置,取出第一个位置的数据和第二个位置的数据,进行比较。如果左边的数据大于右边的数据,就交换;否则,不要更换它们。沿着这个算法一直排序,最大的数就会浮出水面,这就是冒泡排序。

2.排序过程。我们来模拟一下冒泡排序,假设有数组{35,56,34,22,16}。

第一轮排序:

一阶:35大于56,这里我们什么都不管。顺序是:35,56,34,22,16。

第二次排序:56大于34,所以我们让56和34交换顺序:35,34,56,22,16。

三阶:56大于22,交换位置的顺序:35,34,22,56,16。

四阶:56大于16,交换位置的顺序:35,34,22,16,56。

第一轮比较了四次。

第二次排序:

第一种排序:35比34,35大,交换位置顺序:34,35,22,16,56。

第二排序:35大于22,交换位置顺序:34,22,35,16,56。

三阶:35大于16,交换位置的顺序:34,22,16,35,56。

第二轮比较了三次。

第三轮排序:

第一次排序:34大于22,交换位置顺序:22,34,16,35,56。

第二排序:34大于16,交换位置顺序:22,16,34,35,56。

第三轮比较了两次。

第四轮排序:

第一次排序:22比16,22大,交换位置顺序:16,22,34,35,56。

第四轮有对比。

最终顺序:16,22,34,35,56

从上面我们可以看到,比较是N-1次,那么第二次是N-2次,以此类推。比较时间的公式如下:

(N-1)+(N-2)+…+1=((N-1)*N)/2

所以上面比较的总数是((5-1)*5)/2=10。

代码实现如下:

/** * ClassName:BubbleSort <br/> * * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2021年11月4日 上午11:23:32 <br/> * * @author Administrator * @version * @since JDK 1.8 * @see */public class BubbleSort {public static void ***in(String[] args) {int[] data = { 35, 56, 34, 22, 16 };for (int i = 0; i < data.length; i++) {int min = i;// 选择出最小值的下标for (int j = i + 1; j < data.length; j++) {if (data[j] < data[min]) {min = j;}}// 将最小值放到未排序记录的第一个位置if (min != i) {// min>iint temp = data[i];data[i] = data[min];data[min] = temp;}}// 循环输出数组中的元素for (int i = 0; i < data.length; i++) {System.out.println(data[i]);}}}

气泡排序(2):

1.基本思想

比较要排序的数据元素的大小,如果发现两个数据元素是逆序的,就交换,直到没有逆序的数据元素为止。

2.分类过程

假设排序后的数组R [1..n]竖着立着,每个数据元素都被看作一个有重量的气泡。根据轻气泡不能在重气泡下面的原则,自下而上扫描数组R。如果扫描到任何违反这个原则的光泡,让它们上升”浮动”以此类推,直到最后两个泡泡是上面轻的,下面重的。

[示例]:
49 13 13 13 13 13 13 13 13 13 13
38 49 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65 65 65 65

代码实现:

/** * ClassName:BubbleSort <br/> * * Function: 冒泡排序:执行完一次内for循环后,最小的一个数放到了数组的最前面(跟那一个排序算法* 不一样)。相邻位置之间交换 * Reason: TODO ADD REASON. <br/> * Date: 2021年11月4日 上午11:23:32 <br/> * * @author Administrator * @version * @since JDK 8 * @see */public class BubbleSort {/** * 排序算法的实现,对数组中指定的元素进行排序 * * @param array 待排序的数组 * @param from 从哪里开始排序 11 * @param end 排到哪里 11 * @param c 比较器 11 */public void bubble(Integer[] array, int from, int end) {// 需array.length - 1轮比较for (int k = 1; k < end - from + 1; k++) {// 每轮循环中从最后一个元素开始向前起泡,直到i=k止,即i等于轮次止for (int i = end - from; i >= k; i--) {// 按照一种规则(后面元素不能小于前面元素)排序if ((array[i].compareTo(array[i - 1])) < 0) {// 如果后面元素小于了(当然是大于还是小于要看比较器实现了)前面的元素,则前后交换swap(array, i, i - 1);}}}}/** * 交换数组中的两个元素的位置 * * @param array 待交换的数组 * @param i 第一个元素 * @param j 第二个元素 */public void swap(Integer[] array, int i, int j) {if (i != j) {// 只有不是同一位置时才需交换Integer tmp = array[i];array[i] = array[j];array[j] = tmp;}}public static void ***in(String[] args) {Integer[] intgArr = { 35, 56, 34, 22, 16 };BubbleSort bubblesort = new BubbleSort();bubblesort.bubble(intgArr, 0, intgArr.length - 1);for (Integer intObj : intgArr) {System.out.print(intObj + " ");}}}

另一种实现方式:

/** * ClassName:BubbleSort <br/> * * Function: 冒泡排序:执行完一次内for循环后,最大的一个数放到了数组的最后面。相邻位置之间交换 Reason: TODO ADD REASON. * <br/> * Date: 2021年11月4日 上午11:23:32 <br/> * * @author Administrator * @version * @since JDK 8 * @see */public class BubbleSort {public static void ***in(String[] args) {int[] a = { 35, 56, 34, 22, 16 };bubble(a);for (int num : a) {System.out.print(num + " ");}}public static void bubble(int[] a) {for (int i = a.length - 1; i > 0; i--) {for (int j = 0; j < i; j++) {if (new Integer(a[j]).compareTo(new Integer(a[j + 1])) > 0) {swap(a, j, j + 1);}}}}public static void swap(int[] a, int x, int y) {int temp;temp = a[x];a[x] = a[y];a[y] = temp;}}

本文来自清杉投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/548471.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 05-15
下一篇 05-15

相关推荐

  • java创建数组的几种方式 java编写图形界面程序

    数组是一组具有相同数据类型的数据。作为对象,new关键字允许用于内存分配。首先,熟悉一维数组的创建和使用。有两种方法可以声明一维数组:元素类型数组名称[];元素类型[]数组名称;元素类型决定数组的数据类型,在java中可以是任意数据类型,声明一个一维数组,比如int arr

    2023-07-27 04:07:01
    981 0
  • php数组排序 php常用数组函数和用法

    4.2数组排序PHP中的数组实际上是一个有序映射。无论是队列、数组、堆栈还是字典,用PHP编程时都可以统一使用PHP的数组类型。在这一节中,我们只讨论PHP数组的排序,因为数组的排序会被很多项目使用。虽然数据库也可以方便的排序,但是在复杂动态的业务规则下,需要在PHP代码层

    2023-07-22 07:26:01
    604 0
  • java生成随机字符串数组 java代码大全及详解

    Java语言规范、API、JDK和IDE的含义:Java语言规范是Java语法和语义的技术定义,API是应用程序接口(Java预定义的类和接口),Java开发工具包(JDK)包含软件库、编译器、解释器等工具,集成开发环境(IDE)提供编辑、编译、调试和在线帮助功能。Java平台版本:Java SE:允许开发和部

    2023-07-18 17:14:01
    711 0
  • js中数组添加元素的方法 js数组里面放键值对

    今天,我们来学习如何将一个元素添加到一个元素的第一个元素中。1.Array.unshift()let fruits = ["Apple", "Banana", "Mango"];fruits.unshift("Orange");console.log(fruits);// Prints ["Orange", "Apple", "Banana", "Mango"] fruits.unshift("Guava", "Papaya");

    2023-07-07 09:48:01
    871 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信