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

        拆分数组,以最右侧为轴,小于轴的元素数组左侧,大于轴的元素数组右侧,将轴元素移到中央。

    public class QuickSort {
        public static void main(String[] args) {
            int[] arr = {7, 3, 2, 8, 1, 9, 5, 4, 6};
            sort(arr, 0, arr.length - 1);
            print(arr);
        }
    
        /**
         * 快速排序
         *
         * @param arr
         */
        private static void sort(int[] arr, int leftBound, int rightBound) {
            partition(arr, leftBound, rightBound);
        }
    
        private static void partition(int[] arr, int leftBound, int rightBound) {
            int pivot = arr[rightBound];// 杠杆元素,最右侧元素
            int left = leftBound; // 左侧开始元素
            int right = rightBound - 1; // 右侧开始元素
            while (left < right) {
                while (left < right && arr[left] <= pivot) {
                    left++;
                }
                while (left < right && arr[right] >= pivot) {
                    right--;
                }
                if (left < right) {
                    swap(arr, left, right);
                }
            }
            swap(arr, left, rightBound);
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        private static void print(int[] arr) {
    
            for (int i : arr) {
                System.out.print(i + " ");
            }
        }
    }
    

      加入递归处理

    package com.example.sort.quick;
    
    public class QuickSort {
        public static void main(String[] args) {
            int[] arr = {7,3,2,10,8,1,9,5,4,6};
            sort(arr, 0, arr.length - 1);
            print(arr);
        }
    
        /**
         * 快速排序
         *
         * @param arr
         */
        private static void sort(int[] arr, int leftBound, int rightBound) {
            if (leftBound >= rightBound) return;
            int mid = partition(arr, leftBound, rightBound);
            sort(arr, leftBound, mid - 1);
            sort(arr, mid + 1, rightBound);
        }
    
        private static int partition(int[] arr, int leftBound, int rightBound) {
            int pivot = arr[rightBound];// 杠杆元素,最右侧元素
            int left = leftBound; // 左侧开始元素
            int right = rightBound - 1; // 右侧开始元素
            while (left <= right) {
                while (left <= right && arr[left] <= pivot) {
                    left++;
                }
                while (left <= right && arr[right] > pivot) {
                    right--;
                }
                if (left < right) {
                    swap(arr, left, right);
                }
            }
            swap(arr, left, rightBound);
            return left;
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        private static void print(int[] arr) {
    
            for (int i : arr) {
                System.out.print(i + " ");
            }
        }
    }
    

      java默认排序,双轴快排

      ...

      

  • 相关阅读:
    求n(n>=2)以内的质数/判断一个数是否质数——方法+细节优化
    poj1185炮兵阵地 正确代码及错误代码分析
    运算符优先级的几点注意
    mod(%)之规律(除数与被除数的正负分析)
    css背景
    Content-Type
    vue数组的增改和v-model的绑定使用Demo
    python open函数关于w+ r+ 读写操作的理解(转)
    http状态码解释
    cookie与token对比(转)
  • 原文地址:https://www.cnblogs.com/huan30/p/12840160.html
Copyright © 2011-2022 走看看