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

    一、问题描述

    用来对数组进行排序。

    二、实现方法

    • 记一个数组为 int num[n];
    • num[0]记作base。
    • l为左指针
    • r为右指针
    1. num[l] <= base
    2. num[r] > base
    3. 然后不断将num[]细化为, num[0]  ~ num[l-1],  num[r+1] ~ num[n]
    4. 时间复杂度O(nlogn)。深度为 2x=n  ======>  x = log2(n),每层都遍历次数为n。

    三、思想

    分治

    四、Code

    注意最后一次遍历,若先执行num[r] > base这个的话,则最后r == l, 且 num[r] <= base。

     1 package algorithm;
     2 
     3 /**
     4  * Created by adrian.wu on 2019/2/14.
     5  */
     6 public class QuickSort {
     7     public void quickSort(int[] nums, int s, int e) {
     8         if (s >= e) return;
     9         int base = nums[s], l = s, r = e;
    10 
    11         while (l < r) {
    12             while (l < r && nums[r] > base) r--;
    13             while (l < r && nums[l] <= base) l++;
    14             if (l < r) {
    15                 int temp = nums[r];
    16                 nums[r] = nums[l];
    17                 nums[l] = temp;
    18             }
    19         }
    20         nums[s] = nums[l];
    21         nums[l] = base;
    22 
    23         quickSort(nums, s, l - 1);
    24         quickSort(nums, r + 1, e);
    25     }
    26 }
    谢谢!
  • 相关阅读:
    inotify事件监控
    NFS网络文件共享服务
    Rsync数据同步服务
    SSH连接原理及ssh-key讲解
    C语言I博客作业04
    C语言l博客作业03
    C语言I博客作业02
    定义一个计算字符串高度的方法
    字典转模型
    UIScrollView和UIPageControl
  • 原文地址:https://www.cnblogs.com/ylxn/p/10373771.html
Copyright © 2011-2022 走看看