快速排序

一、问题描述

用来对数组进行排序。

二、实现方法

  • 记一个数组为 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 }
谢谢!
原文地址:https://www.cnblogs.com/ylxn/p/10373771.html