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) 稳定

  • 相关阅读:
    ISAPI实现静态页面后并用c#实现分页
    aspx里构造函数里无法使用session,需要重写一个方法放在load里面就能正常使用session了
    记录学习MVC过程,MVC异步请求(五)
    记录学习MVC过程,MVC验证(四)
    记录学习MVC过程,MVC简单路由(三)
    【读书笔记】【韭菜的自我修养】
    【中间件】redis的学习
    【java基础】线程池
    【算法】leetcode刷题 腾讯精选50题 一
    【碎语】让你废掉的七个行为
  • 原文地址:https://www.cnblogs.com/wuhen8866/p/11907598.html
Copyright © 2011-2022 走看看