美文网首页
冒泡与选择排序

冒泡与选择排序

作者: chris_irving | 来源:发表于2019-07-30 17:36 被阅读0次

    优化版冒泡排序

        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);
    
        }
    

    相关文章

      网友评论

          本文标题:冒泡与选择排序

          本文链接:https://www.haomeiwen.com/subject/tyonrctx.html