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默认排序,双轴快排

      ...

      

  • 相关阅读:
    MYSQL查询表信息
    认识WCF
    asp.net mvc 模型验证注解,表单提交
    asp.net mvc 防止开放重定向
    asp.net webForm登录授权
    C# 压缩文件与字节互转
    C#将字节流加密解密
    获取数据库表详细信息、存储过程、视图、的sql
    Mvc4学习笔记一(Ajax.ActionLink)
    java开发之提高java和mysql代码性能和质量
  • 原文地址:https://www.cnblogs.com/huan30/p/12840160.html
Copyright © 2011-2022 走看看