LeetCode : 912. Sort an Array 排序 堆排 快排 归并

悠悠 2021-06-12 20:36 553阅读 0赞

试题
Given an array of integers nums, sort the array in ascending order.

Example 1:

Input: [5,2,3,1]
Output: [1,2,3,5]
Example 2:

Input: [5,1,1,2,0,0]
Output: [0,0,1,1,2,5]

代码

  1. 堆排:
  2. class Solution {
  3. public int[] sortArray(int[] nums) {
  4. buildHeap(nums);
  5. heapSort(nums);
  6. return nums;
  7. }
  8. public void heapSort(int[] nums){
  9. int size = nums.length;
  10. for(int i = size - 1; i > 0; i--){
  11. swap(nums, i, 0);
  12. heapify(nums, 0, i);
  13. }
  14. }
  15. public void buildHeap(int[] nums){
  16. int size = nums.length;
  17. for(int i = size / 2 - 1; i >= 0; i--){
  18. heapify(nums, i, size);
  19. }
  20. }
  21. public void heapify(int[] nums, int i, int size){
  22. int left = 2 * i + 1;
  23. int right = 2 * i + 2;
  24. int largest = i;
  25. if(left < size && nums[left] > nums[largest]) largest = left;
  26. if(right < size && nums[right] > nums[largest]) largest = right;
  27. if(largest != i){
  28. swap(nums, i, largest);
  29. heapify(nums, largest, size);
  30. }
  31. return;
  32. }
  33. public void swap(int[] nums, int i, int j){
  34. int temp = nums[i];
  35. nums[i] = nums[j];
  36. nums[j] = temp;
  37. return;
  38. }
  39. }
  40. 快排:
  41. class Solution {
  42. public int[] sortArray(int[] nums) {
  43. quickSort(nums, 0, nums.length - 1);
  44. return nums;
  45. }
  46. public void quickSort(int[] nums, int left, int right){
  47. if(left < right){
  48. int mid = partition(nums, left, right);
  49. quickSort(nums, left, mid-1);
  50. quickSort(nums, mid+1, right);
  51. }
  52. return;
  53. }
  54. public int partition(int[] nums, int left, int right){
  55. int pivot = nums[left];
  56. int start = left, end = right;
  57. while(start < end){
  58. while(start < end && nums[end] >= pivot) end--;
  59. while(start < end && nums[start] <= pivot) start++;
  60. if(start < end){
  61. swap(nums, start, end);
  62. }
  63. }
  64. swap(nums, left, end);
  65. return end;
  66. }
  67. public void swap(int[] nums, int i, int j){
  68. int temp = nums[i];
  69. nums[i] = nums[j];
  70. nums[j] = temp;
  71. return;
  72. }
  73. }
  74. # 归并:
  75. class Solution {
  76. public int[] sortArray(int[] nums) {
  77. mergeSort(nums, 0, nums.length - 1);
  78. return nums;
  79. }
  80. public void mergeSort(int[] nums, int left, int right){
  81. if(left < right){
  82. int mid = left + (right - left) / 2;
  83. mergeSort(nums, left, mid);
  84. mergeSort(nums, mid+1, right);
  85. merge(nums, left, right, mid);
  86. }
  87. return;
  88. }
  89. public void merge(int[] nums, int left, int right, int mid){
  90. int[] temp = new int[nums.length];
  91. int first = left, second = mid + 1;
  92. int index = left;
  93. while(first <= mid && second <= right){
  94. if(nums[first] <= nums[second]){
  95. temp[index++] = nums[first++];
  96. }else{
  97. temp[index++] = nums[second++];
  98. }
  99. }
  100. while(first <= mid){
  101. temp[index++] = nums[first++];
  102. }
  103. while(second <= right){
  104. temp[index++] = nums[second++];
  105. }
  106. for(int i = left; i <= right; i++){
  107. nums[i] = temp[i];
  108. }
  109. return;
  110. }
  111. public void swap(int[] nums, int i, int j){
  112. int temp = nums[i];
  113. nums[i] = nums[j];
  114. nums[j] = temp;
  115. return;
  116. }
  117. }

发表评论

表情:
评论列表 (有 0 条评论,553人围观)

还没有评论,来说两句吧...

相关阅读