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

    快速排序主要使用递归思想,两种实现方式

    1.快速排序代码实现(挖坑法)

    package com.ch.interfacemanager.controller;
    
    import java.util.Arrays;
    
    public class QuickSort {
        public static void quickSort(int[] arr, int startIndex, int endIndex) {
            // 递归结束条件:startIndex大等于endIndex的时候
            if (startIndex >= endIndex) {
                return;
            }
            // 得到基准元素位置
            int pivotIndex = partition(arr, startIndex, endIndex);
            // 用分治法递归数列的两部分
            quickSort(arr, startIndex, pivotIndex - 1);
            quickSort(arr, pivotIndex + 1, endIndex);
        }
         
        
         
         
        private static int partition(int[] arr, int startIndex, int endIndex) {
            // 取第一个位置的元素作为基准元素
            int pivot = arr[startIndex];
            int left = startIndex;
            int right = endIndex;
            // 坑的位置,初始等于pivot的位置
            int index = startIndex;
         
            //大循环在左右指针重合或者交错时结束
            while ( right >= left  ){
                //right指针从右向左进行比较
                while ( right >= left ) {
                    if (arr[right] < pivot) {
                        arr[left] = arr[right];
                        index = right;
                        left++;
                        break;
                    }
                    right--;
                }
                //left指针从左向右进行比较
                while ( right >= left ) {
                    if (arr[left] > pivot) {
                        arr[right] = arr[left];
                        index = left;
                        right--;
                        break;
                    }
                    left++;
                }
            }
            arr[index] = pivot;
            return index;
        }
         
        public static void main(String[] args) {
            int[] arr = new int[] {4,7,6,5,3,2,8,1};
            quickSort(arr, 0, arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
    
    }

    2.快速排序代码实现(指针交换法)个人比较喜欢此种方法

    package com.ch.interfacemanager.controller;
    
    import java.util.Arrays;
    
    public class QuickSort2 {
        public static void quickSort(int[] arr, int startIndex, int endIndex) {
            // 递归结束条件:startIndex大等于endIndex的时候
            if (startIndex >= endIndex) {
                return;
            }
            // 得到基准元素位置
            int pivotIndex = partition(arr, startIndex, endIndex);
            // 根据基准元素,分成两部分递归排序
            quickSort(arr, startIndex, pivotIndex - 1);
            quickSort(arr, pivotIndex + 1, endIndex);
        }
         
        
         
         
        private static int partition(int[] arr, int startIndex, int endIndex) {
            // 取第一个位置的元素作为基准元素
            int pivot = arr[startIndex];
            int left = startIndex;
            int right = endIndex;
         
            while( left != right) {
                //控制right指针比较并左移
                while(left<right && arr[right] > pivot){
                    right--;
                }
                //控制right指针比较并右移
                while( left<right && arr[left] <= pivot) {
                    left++;
                }
                //交换left和right指向的元素
                if(left<right) {
                    int p = arr[left];
                    arr[left] = arr[right];
                    arr[right] = p;
                }
            }
         
            //pivot和指针重合点交换
            int p = arr[left];
            arr[left] = arr[startIndex];
            arr[startIndex] = p;
         
            return left;
        }
         
        
         
         
        public static void main(String[] args) {
            int[] arr = new int[] {4,7,6,5,3,2,8,1};
            quickSort(arr, 0, arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
    
    }
  • 相关阅读:
    Variant 数组
    socket c/s分佈式編程
    多線程幾個方法說明
    hash表的使用
    MIS系统权限控制的一个简便方法
    git 使用总结
    让 VAGRANT 启动并运行起来
    深入理解 Laravel 中 config 配置加载原理
    Vagrant入门
    php开发APP接口(总结一)
  • 原文地址:https://www.cnblogs.com/UncleWang001/p/10823702.html
Copyright © 2011-2022 走看看