C++ (快排和归并排序)
1.归并排序
class Solution { public: void mergeSort(vector<int>&nums,int l,int r){ if(l>=r) return; int mid = l+(r-l)/2; mergeSort(nums,l,mid); mergeSort(nums,mid+1,r); int l1 = mid-l+1; int l2 = r-mid; vector<int> a(l1); vector<int> b(l2); for(int i = 0;i){ a[i] = nums[l+i]; } for(int j = 0;j ){ b[j] = nums[mid+1+j]; } int i =0,j=0; int k = l; while(i l2){ if(a[i]; else nums[l++] = a[i],j++; } while(i<l1){ nums[l++] = a[i],i++; } while(j<l2){ nums[l++] = b[j],j++; } } void quickSort(vector<int>&nums, int l,int r){ if(l>=r) return; swap(nums[l],nums[l+rand()%(r-l+1)]); int p = nums[l]; int i = l;int j = r; while(i<j){ while(i =p)j--; while(i ; swap(nums[i],nums[j]); } swap(nums[l],nums[i]); quickSort(nums, l, i-1); quickSort(nums, i+1, r); } vector<int> sortArray(vector<int>& nums) { quickSort(nums,0,nums.size()-1); return nums; } };
2.快排
class Solution { public: void quickSort(vector<int>&nums, int l,int r){ if(l>=r) return; swap(nums[l],nums[l+rand()%(r-l+1)]); int p = nums[l]; int i = l;int j = r; while(i<j){ while(i=p)j--; while(i ; swap(nums[i],nums[j]); } swap(nums[l],nums[i]); quickSort(nums, l, i-1); quickSort(nums, i+1, r); } vector<int> sortArray(vector<int>& nums) { quickSort(nums,0,nums.size()-1); return nums; } };