快速排序
一、问题描述
用来对数组进行排序。
二、实现方法
- 记一个数组为 int num[n];
- num[0]记作base。
- l为左指针
- r为右指针
- num[l] <= base
- num[r] > base
- 然后不断将num[]细化为, num[0] ~ num[l-1], num[r+1] ~ num[n]
- 时间复杂度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 }
谢谢!