zoukankan      html  css  js  c++  java
  • 【算法】快速排序

    注意点

    • 分治思想、递归思想
    • 时间复杂度O(nlogn),适合大规模数据排序
    • 在数组中 找一个分区点,把数据分隔成两区间,一部分小于分区点,一部分大于分区点,然后递归处理分隔后的连个小的区间。
    • 原地排序,不占用太多额外空间
    package algorithm.sort;
    
    import java.util.Arrays;
    
    public class QuickSort {
        public static void main(String[] args) {
            int[] arr = {11,6,8,2,1,4,13};
            sort(arr,0,arr.length-1);
            System.out.println(Arrays.toString(arr));
        }
    
        private static void sort(int[] arr,int head,int tail) {
            if(head > tail) return;
    
            int q = partition(arr,head, tail);
    
            sort(arr,head,q-1);
            sort(arr,q+1,tail);
        }
    
        /**
         * 分区,根据分区点,把数据分成两半
         * @param arr
         * @param head
         * @param tail
         * @return
         */
        private static int partition(int[] arr,int head,int tail){
            int pivot = arr[tail];//分区点
            int i = head;
            for(int j=head;j<=tail-1;j++) {
                if(arr[j] < pivot) {
                    //swap arr[i] with arr[j]
                    int tmp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = tmp;
                    i++;
                }
            }
            //swap arr[i] with arr[tail]
            arr[tail] = arr[i];
            arr[i] = pivot;
            return i;
        }
    
    }
    
  • 相关阅读:
    brew一直卡在Updating Homebrew的解决办法
    ELK5.6.4+Redis+Filebeat+Nginx(CentOS7.4)
    CentOS7.3 ffmpeg安装
    nginx Dockerfile
    pip安装第三方包超时
    logrotate nginx日志切割
    Ansible部署zabbix-agent
    Zabbix主动模式和被动模式
    Zabbix添加监控主机
    Zabbix3.2安装
  • 原文地址:https://www.cnblogs.com/zendwang/p/algorithm-quick-sort.html
Copyright © 2011-2022 走看看