01冒泡排序

59 阅读1分钟

01冒泡排序

基本思想:通过两个数依次比较大小,较大的数下沉,较小的数上浮。
讲解:
//定义一个名为Bubble_sort的方法,设置需要的参数为:a[](需要排序的数组)和len(该数组的长度)。
public static void Bubble_sort(int a[],int len){
        //外层for循环控制的是纵向上的趟数
        //即冒泡排序的外循环本质而言是将待排区域的最大元素一步一步向数组末尾传递
        //因为最开始整个数组都是待排序的,因此i的值从0开始,到最后一个元素下标:len - 1结束
        for(int i = 0;i < len - 1;i++){
            //设置一个哨兵flag = 1,作用后面再讲
            int flag = 1;
            //内层for循环控制的是横向上的比较次数
            //我们知道每进行一次外循环,就会有一个待排区域的最大值被移到数组末尾
            //因此我们在进行内循环比较的是待排区域的每个数之间的比较,不再需要考虑末尾最大数
            //这就是为什么j的值是从0开始,但结束值为:len - 1 - i,即末尾下标 - 已排区域的个数
            for(int j = 0;j < len - 1 - i;j++){
                //在内循环中,两两比较前后元素的大小,若前一个元素大于了后一个元素
                if(a[j] > a[j + 1]){
                    //即进行交换
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    //并将flag的值更新为0,表示此次循环中有进行过交换
                    flag = 0;
                }
            }
            //在内循环结束后,判断flag是否仍为1
            //flag的作用:在冒泡排序中,若内循环(即待排区域)已经没有发生交换,则说明整个数组已经有序
            //因此我们可以通过设置一个标志flag的值是否改变来观察数组是否提前有序了
            if(flag == 1){
                break;
            }
        }
    }