解法一:随机快排

随机快排。

  1. class Solution {
  2. private int[] arr;
  3. public int[] sortArray(int[] nums) {
  4. arr = nums.clone();
  5. sort();
  6. return arr;
  7. }
  8. public void sort() {
  9. _sort(0, arr.length - 1);
  10. }
  11. private void _sort(int left, int right) {
  12. if (left >= right) {
  13. return;
  14. }
  15. int mid = partition(left, right);
  16. _sort(left, mid - 1);
  17. _sort(mid + 1, right);
  18. }
  19. private int partition(int left, int right) {
  20. int index = new Random().nextInt(right - left + 1) + left;
  21. int temp = arr[index];
  22. arr[index] = arr[left];
  23. arr[left] = temp;
  24. int mid = arr[left];
  25. while (left < right) {
  26. while ((left < right) && (arr[right] >= mid)) {
  27. --right;
  28. }
  29. arr[left] = arr[right];
  30. while ((left < right) && (arr[left] <= mid)) {
  31. ++left;
  32. }
  33. arr[right] = arr[left];
  34. }
  35. arr[left] = mid;
  36. return left;
  37. }
  38. }