• 冒泡排序和快速排序的java实现


    转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6264831.html

    冒泡

        public static int[] bubble_sort(int[] arr) {
            int n = arr.length;
            for (int i = 0; i < n - 1; i++) {//每次循环代表一轮冒泡,一轮冒泡后顶端的数字一定是最大的
                for (int j = 0; j < n - 1 - i; j++) {
                    if (arr[j] < (arr[j + 1])) {
                        int tmp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = tmp;
                    }
    
                }
            }
    
            return arr;
    
        }

    快速排序1

        public static void quick_sort(int[] arr, int start, int end) {
    
            if (start >= end) {
                // System.out.println("qs finish");
                return;
            }
            int x = arr[start];
            int s = start;
            int e = end;
    
            while (s < e) {
                if (arr[e] < x) {
                    for (; s < e; s++) {
                        if (arr[s] > x) {
                            int tmp = arr[s];
                            arr[s] = arr[e];
                            arr[e] = tmp;
                            // System.out.println("switch " + arr[s] + " " +
                            // arr[e]);
                            // System.out.println("s is " + s + " e is " + e);
                            break;
                        }
                    }
                } else {
                    e--;
    
                }
            }
            // System.out.println(" the end s is " + s + " e is " + e +
            // " arr[s] is "
            // + arr[s]+"  arr[start] is "+arr[start]);
    
            arr[start] = arr[s];
    
            arr[s] = x;
    
    
            System.out.println("quick_sort is "+Arrays.toString(arr));
    
            quick_sort(arr, start, s - 1);
            quick_sort(arr, s + 1, end);
    
        }

    快速排序2代码优化

        public static void quick_sort2(int[] arr, int start, int end) {
    
            if (start < end) {
    
                int x = arr[start];
                int s = start;
                int e = end;
    
                while (s < e) { //退出循环代表一轮排序结束,首尾游标相遇
                    while (s < e && (arr[e] >= x)) // 从右向左找第一个小于x的数
                    {
                        e--;
                    }
    
                    while (s < e && (arr[s] <= x)) // 从右向左找第一个小于x的数
                    {
                        s++;
                    }
    
                    if (s < e) {// 左右两个数交换
                        int tmp = arr[s];
                        arr[s] = arr[e];
                        arr[e] = tmp;
    
    //                    System.out.println("switch " + arr[s] + " " + arr[e]);
    //                    System.out.println("s is " + s + " e is " + e);
                    }
    
                }
    
                arr[start] = arr[s]; //基准数归位到数组中正确位置
    
                arr[s] = x;
    
                System.out.println("quick_sort2 is "+Arrays.toString(arr));
    
                quick_sort2(arr, start, s - 1);
                quick_sort2(arr, s + 1, end);
    
            }
    
        }
  • 相关阅读:
    第二章 逻辑代数及其简化
    小知识:三极管ie==ic+ib
    第二章.2 真值表→表达式的转换
    C# 静态变量及静态函数
    第四章(1):变量静态变量和实例变量
    转义大括号
    能被15整除的最大整数
    动态规划矩阵连乘问题
    [转]三极管的集电结反向偏置电压
    anddroid App, Framework, Sdk编译
  • 原文地址:https://www.cnblogs.com/dongxiao-yang/p/6264831.html
Copyright © 2020-2023  润新知