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

    06-排序【快速排序】算法学习

    • 思想:运用递归思想,将原始数据分为三部分进行排序,然后合并数组arr_left、中间数middle 和 数组arr_right。
    • 操作:比较
    • 是否稳定排序:
       
    • 是否原地排序:
       
    • 时间复杂度:O(nlogn)
       
    • 最好时间复杂度:O(nlogn)
       
    • 最坏时间复杂度:O(n²)
       
    • 平均时间复杂度:O(nlogn)
       
    • 空间复杂度:O(n)

           总结:快速排序运用递归算法、以及分治的思想,将大问题转换为其子问题,然后合并子解,最终求的结果的算法。

          实现代码(java)含义解释如下:

    1. int[] quick_sort(int[] arr, int p, int q)方法:用于将数组arr内待排序的下标p至q的集合,分解为三部分,arr[p, r] 、middle 和 arr[r, q]。
         终止条件是,当数组内元素被分解至一个时,则该数组不可再分解,即返回该元素,若为空数组时,则返回一个空数组。
    2. 
      
      int[] merge(int[] arr1, int middle, int[] arr2)方法:将两个数组及一个中间数合为一个数组集合。
      不要求arr1或者arr2为有序数组
        public static void main(String[] args) {
            int[] arr = new int[]{6, 5, 11, 3, 1, 7, 9, 4, 2, 8};
            int[] result = quick_sort(arr, 2, arr.length-2);
            System.out.println(result);
        }


    public static int[] quick_sort(int[] arr, int p, int q) { if (p >= q) { return new int[0]; } if (p == q-1) { return new int[]{arr[p]}; } int middle = arr[q-1]; int[] left = new int[arr.length]; int[] right = new int[arr.length]; int i, j; for (i = 0, j = 0; p < q-1; p++) { if (arr[p] <= middle) { left[i++] = arr[p]; } else { right[j++] = arr[p]; } } return merge(quick_sort(left, 0, i), middle, quick_sort(right, 0, j)); }
    public static int[] merge(int[] arr1, int middle, int[] arr2) { int[] newArr = new int[arr1.length + 1 + arr2.length]; int k = 0; for (int i = 0; i < arr1.length; i++) { newArr[k++] = arr1[i]; } newArr[k++] = middle; for (int j = 0; j < arr2.length; j++) { newArr[k++] = arr2[j]; } return newArr; }
    ____________________________特此,勉励____________________________
    本文作者cheng2839
    本文链接https://www.cnblogs.com/cheng2839
    关于博主:评论和私信会在第一时间回复。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    EasyUi TreeGrid封装
    Ionic项目中使用极光推送
    Win7搭建NodeJs开发环境
    NET 平台下的插件化开发内核
    访问数据库时如何解决并发问题
    async & await 的前世今生
    Linux环境编程相关的文章
    C# 5.0 Async函数的提示和技巧
    python算法题
    如何从数组中随机取出多个不重复的项
  • 原文地址:https://www.cnblogs.com/cheng2839/p/14510403.html
Copyright © 2011-2022 走看看