云和教育:云和数据集团旗下高端ICT职业教育品牌
  • 国家级全民数字素养与技能培训基地
  • 河南省第一批产教融合型企业建设培育单位
  • 郑州市数字技能人才(码农)培养评价联盟
当前位置: 首页学习资料JAVA

什么是冒泡排序?手写一段冒泡排序的代码

  • 作者:云和教育
  • 日期:2022-01-18
  • 浏览:646次

1)要求

能够用自己语言描述冒泡排序算法

能够手写冒泡排序代码

了解一些冒泡排序的优化手段

2)算法描述

· 依次比较数组中相邻两个元素大小,若 a[j] > a[j+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后

·  重复以上步骤,直到整个数组有序

3)算法实现
实现冒泡程序的代码如下:

public static void bubble(int[] a) {

    for (int j = 0; j < a.length  1; j++) {

        // 一轮冒泡

        boolean swapped = false; // 是否发生了交换

        for (int i = 0; i < a.length  1  j; i++) {

            System.out.println("比较次数" + i);

            if (a[i] > a[i + 1]) {

                Utils.swap(a, i, i + 1);

                swapped = true;

            }

        }

        System.out.println("第" + j + "轮冒泡"

                           + Arrays.toString(a));

        if (!swapped) {

            break;

        }

    }}

优化点1:每经过一轮冒泡,内层循环就可以减少一次

优化点2:如果某一轮冒泡没有发生交换,则表示所有数据有序,可以结束外层循环

 

4)进一步优化

public static void bubble_v2(int[] a) {

    int n = a.length  1;

    while (true) {

        int last = 0; // 表示最后一次交换索引位置

        for (int i = 0; i < n; i++) {

            System.out.println("比较次数" + i);

            if (a[i] > a[i + 1]) {

                Utils.swap(a, i, i + 1);

                last = i;

            }

        }

        n = last;

        System.out.println("第轮冒泡"

                           + Arrays.toString(a));

        if (n == 0) {

            break;

        }

    }}

每轮冒泡时,最后一次交换索引可以作为下一轮冒泡的比较次数,如果这个值为零,表示整个数组有序,直接退出外层循环即可。