Java排序算法之冒泡排序

Java排序算法之冒泡排序交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换” 之。冒泡排序是交换类排序的一种。本篇文章讲解以下内容:基本思想源码源码解析算法原理效率分析
摘要由CSDN通过智能技术生成

Java排序算法之冒泡排序

交换类排序主要是通过两两比较待排元素的关键字,若发现与排序要求相逆,则“交换”
之。冒泡排序是交换类排序的一种。本篇文章讲解以下内容:

  • 基本思想
  • 源码
  • 源码解析
  • 算法原理
  • 效率分析

冒泡排序的基本思想

基本处理思想是通过对相邻两个数据的比较及其交换来达到排序的目的。
首先,将 n 个元素中的第一个和第二个进行比较,如果两个元素的位置为逆序,则交换两个元素的位置;进而比较第二个和第三个元素关键字,如此类推,直到比较第 n-1 个元素和第 n 个元素为止;
上述过程描述了起泡排序的第一趟排序过程,在第一趟排序过程中,我们将关键字最大的元素通过交换操作放到了具有 n 个元素的序列的最一个位置上。
然后进行第二趟排序,在第二趟排序过程中对元素序列的前 n-1 个元素进行相同操作,其结果是将关键字次大的元素通过交换放到第 n-1 个位置上。一般来说,第 i 趟排序是对元素序列的前 n-i+1 个元素进行排序,使得前 n-i+1 个元素中关键字最大的元素被放置到第 n-i+1 个位置上。排序共进行 n-1 趟,即可使得元素序列按关键字有序。

源码

package com.algorithm.sorting;
/**
 * 冒泡排序
 * @author Administrator
 *
 */
public class BubbleSort {
   

    public static void BubbleSort(int[] arr) {
        System.out.print("要排序的数组:");
        for (int a = 0; a < arr.length; a++) {
            System.out.print(arr[a] + "\t");
        }
        System.out.println("");
        int temp;// 临时变量
        for (int i = 0; i < arr.length - 1; i++) { // 表示排序次数,一共arr.length-1次。
            for (int j = arr.length - 1; j > i; j--) {

                if (arr[j] < arr[j - 1]) {
  //"<",代表正序即从小到大;">"代表逆序即从大到小
                    temp = arr[j];
                    arr[j] = arr[j - 1];
                    arr[j - 1] = temp;
                }
            }
            System.out.print("第" + (i + 1) + "次排序结果:");
            for (int a = 0; a < arr.length; a++) {
                System.out.print(arr[a] + "\t");
            }
            System.out.println("");
        }
        System.out.print("最终排序结果:");
        for (int a = 0; a < arr.length; a++) {
            System.out.print(arr[a] + "\t");
        }
    }

    public static void main(String[] args) {
    int array[]={
  100, 20, 30,-1,99,53}; 
    BubbleSort(array);
    }
}

源码解析

首先看正序的整个过程:

要排序的数组:100  20  30  -1  99  53  
第1次排序结果:-1  100 20  30  53  99  
第2次排序结果:-1  20  100 30  53  99  
第3次排序结果:-1  20  30  100 53  99  
第4次排序结果:-1  20  30  53  100 99  
第5次排序结果:-1  20  30  53  99  100 
最终排序结果:-1   20  30  53  99  100 

再看逆序的整个过程:

要排序的数组:100  20  30  -1  99  53  
第1次排序结果:100 99  20  30  -1  53  
第2次排序结果:100 99  53  20  30  -1  
第3次排序结果:100 99  53  30  20  -1  
第4次排序结果:100 99  53  30  20  -1  
第5次排序结果:100 99  53  30  20  -1  
最终排序结果:100  99  53  30  20  -1  

算法执行过程(正序):

  • 比较相邻的两个数据,如果第二个数小,就交换位置。
  • 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
  • 继续重复上述过程,依次将第2.3…n-1个最小数排好位置。

算法原理

  • 首先将第一个数据与第二个数据进行比较,如果是逆序(即arr[j]>arr[j+1)则交换之,然后比较第二个数据和第三个数据,依此类推,直到第n-1个数据和第n个数据进行过比较为止。上述过程称为冒泡排序的第一趟处理,第一趟处理的结果使得最大的数据被安置在最后一个元素的位置上。然后进行第二趟处理,即对前n-1个数据进行上述的处理,第二趟处理的结果是使次大的数据被安置在倒数第二个数据位置上。
  • 一般地,冒泡排序的第i趟是从arr[0]到arr[n-i]依次比较相邻两个元素的关键字,并在逆序时交换相邻的数据,其结果是将这n-i+1个数据中最大的交换到n-i的位置上。整个排序过程需要进行n-1趟处理,第n-1趟处理使倒数第二的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值