冒泡与选择排序

2019-07-30  本文已影响0人  chris_irving

优化版冒泡排序

    public static void bubbleSort(int[] array) {
        //1 2 3 4 5 9 4 6 7   
        for (int i = array.length - 1; i > 0; i--) {
            boolean flag = true;//添加标志位是为了检测如果在某趟循环中没有数据交换,就表示排序完成,可以直接退出循环
            for (int j = 0; j < i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = false;
                }
            }
            if (flag) {
                break;
            }
        }
    }

选择排序

    public static void selectSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[j] < array[index]) {
                    index = j;
                }
            }
            //{1,2,5,8,3,9,4,6,7};
            if (index != i) {//如果已经是最小的,就不需要交换
                int temp = array[index];
                array[index] = array[i];
                array[i] = temp;
            }
        }
    }

数据交换常用三种算法对比

    @Test
    public void testSwap() {
        int a = 2;
        int b = 4;
        //1 可读性最好的
//        int t=a; a=b; b=t;
        //2 不占用额外资源
//        a=a+b;
//        b=a-b;
//        a=a-b;
        //3  性能最优(没有可读性)一般用在 无人机 嵌入式设备等对内存要求严苛的环境中
        //异或操作符(口诀:相同取0,相异取1)
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("a=" + a + "--b=" + b);

    }
上一篇下一篇

猜你喜欢

热点阅读