• 6. 快速排序


    思想

    快速排序,是选取一个元素,然后经过交换元素,保证选定元素的左边都小于它,右边元素都大于它。每次操作后,选定元素的位置就是排序后的位置。

    就像多个人进行高矮个排列一样,你看了下,前面的人都比你矮,后面的人都比你高,那么你就可以不动了,随他们怎么折腾,反正你站的位置对了,他们排序好了,你也还是站在这个位置。

    实现

    import java.util.Arrays;
    
    public class QuickSort {
        public static void main(String[] args) {
            int[] nums = {5, 12, 5, 7, 1, 4, 7, 8, 9};
            quickSort(nums, 0, nums.length-1);
            System.out.println(Arrays.toString(nums));
    
        }
    
        public static void quickSort(int[] nums, int start, int end){
            if(start>=end) return ;
            int mid = partition(nums, start, end);
            quickSort(nums, start, mid-1);
            quickSort(nums, mid+1, end);
        }
    
        public static int partition(int[] nums, int start, int end){
            
            int p_value = nums[start];
            int i = start, j = end+1;
            while(true){
                while(nums[++i]<p_value) if(i>=end) break;
                while(nums[--j]>p_value) if(j<=start) break;
                if(i>=j) break;
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
            int temp = nums[j];
            nums[j] = nums[start];
            nums[start] = temp;
            return j;
        }
    }
    
    

    复杂度

    快排的平均时间复杂度是NlogN。空间复杂度为O(1)

  • 相关阅读:
    仿jquery 选择器功能
    多个div拖拽功能
    js 模拟jquery onready 事件
    随着鼠标移动的图片百叶窗效果
    计算体重引发的思考
    js 模拟事件
    表单验证功能(利用冒泡功能)
    视频播放滚动条(最终完善版)
    仿制视频播放滚动条效果(加左右控制按钮)
    无极树(待整理)
  • 原文地址:https://www.cnblogs.com/zhouzhiyao/p/12528452.html
Copyright © 2020-2023  润新知