zoukankan      html  css  js  c++  java
  • 冒泡排序的基本实现

    基本流程:

    N个数字,进行a[0]和a[1]比较,如果前者比后者大,就交换位置;a[1]和a[2]比较,如果前者比后者大,就交换位置...直到最后一个数字,此时可以保证最后一个数字整组最大;

    剩余N-1个数字,进行a[0]和a[1]比较,如果前者比后者大,就交换位置;...,此时可以保证最后两个数字整组最大;

    ...

    经过N-1轮比较,剩余最后一个数字,不必比较。

     

    经过上述的梳理,可以看到,外层循环只需要进行N-1轮;而每一轮的比较,需要根据轮数确定数组下标的位置,应该是从a[0]与a[1]比较,一直比较到第a[N-2]和第a[N-1]个元素(因为最大就是a[N-1]);随着轮数的增加,这里的最大元素递减1个。

    对于大小不符合顺序的元素,我们需要进行交换操作。如果整个一轮都没有发生交换,那么可以判定,这一组数据已经符合顺序。可以退出比较。

     

    图示:

     代码如下,注意外层循环与内层循环index范围的处理:

    public class BubbleSort {
        public void bubbleSort(int[] array) {
            int temp;
            int count = 0;
            for (int i = 0; i < array.length - 1; i++) {
                boolean ordered = true;
                count++;
                for (int j = 0; j < array.length - 1 - i; j++) {
                    if (array[j] > array[j + 1]) {
                        ordered = false;
                        temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
                if (ordered) {
                    break;
                }
            }
            System.out.println("count = " + count);
        }
    }

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/15264709.html
Copyright © 2011-2022 走看看