[关闭]
@XQF 2018-03-07T14:54:30.000000Z 字数 780 阅读 769

排序----快速排序

数据结构与算法


哨兵,,。

  1. public class Solution {
  2. public void quickSort(int[] nums, int left, int right) {
  3. if (left > right) {
  4. return;
  5. }
  6. int base = nums[left];
  7. //i=left+1,会溢出时因为最后left=right,又会打乱顺序,所以把基准数拍进去
  8. int i = left;
  9. int j = right;
  10. //全程i和j是井水不犯河水的
  11. while (i < j) {
  12. //在内部是很可能i==j
  13. while (nums[j] >= base && i < j) {
  14. j--;
  15. }
  16. while (nums[i] <= base && i < j) {
  17. i++;
  18. }
  19. if (i < j) {
  20. int temp = nums[i];
  21. nums[i] = nums[j];
  22. nums[j] = temp;
  23. }
  24. }
  25. nums[left] = nums[i];
  26. nums[i] = base;
  27. quickSort(nums, left, i - 1);
  28. quickSort(nums, i + 1, right);
  29. }
  30. public static void main(String[] args) {
  31. int[] nums = {1, 2, 55, 6, 3, 2, 4, 5, 6, 8, 9, 0};
  32. Solution solution = new Solution();
  33. solution.quickSort(nums, 0, nums.length - 1);
  34. System.out.println(Arrays.toString(nums));
  35. }
  36. }

最后的结局是j会一路减小到值为i,但是都没有发生突发事件,于是说明我们的顺序已经排好了,完美收工。快速排序把数组从某个元素分为两部分。但这两部分均是无序的。于是递归两部分,目的是为了拿到分组的标准,。,。直到后面结束的时候一个元素就是一组。与归并不同的是他要中间的数。而归并必须把中间的数划到其中一部分中。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注