排序算法之冒泡排序

考点1:交换两个数,不借助第三个变量,使用异或操作,异或规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

考点2:冒泡排序的原理:从左往右两两比较大小,小的放左边,每次循环找出当前趟的最大值,再比较这个数之前的序列,一直循环到只有两个数字,比较完这两个数的大小之后,冒泡排序结束;

上代码:

package sort;

import org.junit.Test;

/**
 * @ClassName: BubbleSort
 * @Description: 冒泡排序
 *                原理:从左往右两两比较大小,小的放左边,每次
 *                循环找出当前趟的最大值,再比较这个数之前的序
 *                列,一直循环到只有两个数字,比较完这两个数的
 *                大小之后,冒泡排序结束;
 * @Author: hunterm
 * @Date: 2019/8/8 9:36
 * @Version: 1.0
 */
public class BubbleSort {
    @Test
     public void test(){
        int[] array = {5,6,2,0,3,99,5,52,31,1,4};
        int[] bub = new BubbleSort().bubble(array);
        for(int i = 0;i < bub.length;i++){
            System.out.println(bub[i]);
        }
    }
    public int[] bubble(int[] array){
        for(int i = 0;i < array.length-1;i++){
            for(int j = 0;j < array.length-i-1;j++) {
                if (array[j] > array[j + 1]) {
                    array[j] = array[j] ^ array[j + 1];
                    array[j + 1] = array[j] ^ array[j + 1];
                    array[j] = array[j] ^ array[j + 1];
                }
            }
        }
        return array;
    }
}

  总结:不要背代码,只要你明白原理之后,各种方式都可以写出来,比如:1)每次循环找出序列中最小的数放在最前面,知道比较完最后两个数字的大小之后,冒泡结束;2)采用降序的方式如何写代码;

原文地址:https://www.cnblogs.com/maohaitao/p/11319547.html