zoukankan      html  css  js  c++  java
  • 快速排序

    基础排序参考
    https://blog.csdn.net/yushiyi6453/article/details/76407640

    快速排序

    快速排序从小到大排序:在数组中随机选一个数(默认数组首个元素),数组中小于等于此数的放在左边,大于此数的放在右边,再对数组两边递归调用快速排序,重复这个过程。

    代码实现

    package quicksort;

    import java.util.Random;
    import java.util.Scanner;

    /**
     * @author WangXiaoeZhe
     * @Date: Created in 2019/11/21 18:54
     * @description:
     */

    public class QuickSort {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int[] arr = new int[5];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = scanner.nextInt();
            }
            int[] ints = quickSort(arr, 0, arr.length - 1);
            for (int i = 0; i < ints.length; i++) {
                System.out.println(ints[i]);
            }
        }

        /**
         *
         * 普通快排
         * @param arr
         * @param l
         * @param r
         * @return
         */

        private static int[] quickSort(int[] arr, int l, int r) {
            int i, j, temp;
            if (l > r) {
                return arr;
            }
            temp = arr[l];
            i = l;
            j = r;
            while (i != j) {
                while (arr[j] >= temp && i < j) {
                    j--;
                }
                while (arr[i] <= temp && i < j) {
                    i++;
                }
                if (i < j) {
                    swap(arr, i, j);
                }
            }
            /**
             * 基准归为
             */


            arr[l]=arr[i];
            arr[i]=temp;
            /**
             * 递归
             */

            quickSort(arr,l,i-1);
            quickSort(arr,i+1,r);
            return arr;
        }

        /**
         * 随机快排
         * @param arr
         * @param l
         * @param r
         * @return
         */

        public static int[] randomQuickSort(int[] arr, int l, int r) {
            int i, j,temp;
            if (l > r) {
                return arr;
            }
            /**
             *  随机快排
             */

            Random random = new Random();
            int tp = random.nextInt(r - l + 1) + l;
            swap(arr, l, tp);
            temp = arr[l];
            i = l;
            j = r;
            while (i != j) {

                while (arr[j] >= temp && i < j) {
                    j--;
                }
                while (arr[i] <= temp && i < j) {
                    i++;
                }

                if (i < j) {
                    swap(arr, i, j);
                }
            }
            /**基准归位*/
            arr[l] = arr[i];
            arr[i] = temp;
            /**递归*/
            randomQuickSort(arr, l, i - 1);
            randomQuickSort(arr, i + 1, r);
            return arr;

        }

        public static void swap(int[] arr, int i, int j) {
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }

    平均时间复杂度:O(n*logn) 最坏时间复杂度:O(n^2) 空间复杂度:O(logn) 稳定

  • 相关阅读:
    使用SQLCOMMAND以及SQLADAPERT 调用存储过程
    将表A的数据复制到表B,以及关于主表和子表的删除办法
    登录次数验证,可能还是有些不足的,希望大家指正
    MVC过滤器
    sql数据库delete删除后怎么恢复,这是网上找的答案。。希望大神验证指教一下
    淘宝前后端分离实践
    P1852 [国家集训队]跳跳棋
    P2154 [SDOI2009]虔诚的墓主人
    P4208 [JSOI2008]最小生成树计数
    P2467 [SDOI2010]地精部落
  • 原文地址:https://www.cnblogs.com/wuhen8866/p/11907598.html
Copyright © 2011-2022 走看看