Sorting
Merge Sort
public void mergeSort(int[] nums){
if(nums == null || nums.length == 0){
return nums;
}
ms(nums, 0, nums.length-1);
}
private void ms(int[] nums, int s, int e){
if(s > e){
return;
}
int m = s + (e - s)/2;
ms(nums, s, m);
ms(nums, m+1, e);
merge(nums, s, e, m);
}
private void merge(int[] nums, int s, int e, int m){
int[] helpArr = new int[nums.length];
for(int i = s; i <= e; i++){
helpArr[i] = nums[i];
}
int i = s, j = m, current = s;
while(i <= m && j <=e){
if(helpArr[i] > helpArr[j]){
nums[current++] = helpArr[i++];
}
else{
nums[current++] = helpArr[j++];
}
}
for(int k = i; k <= m; k++){
nums[current++] = helpArr[k++];
}
}
Quick Sort
public void quickSort(int[] nums){
if(nums == null || nums.length == 0){
return;
}
qs(nums, 0, nums.length - 1);
}
private void qs(int[] nums, int s, int e){
if(s > e){
return;
}
int index = partition(nums, s, e);
qs(nums, s, index - 1);
qs(nums, index, e);
}
private int partition(int[] nums, int s, int e){
if(s >= e){
return;
}
int m = s + (e - s)/2;
int pivot = nums[m];
while(s <= e){
while(nums[s] < pivot) s++;
while(nums[e] > pivot) e--;
if(s <= e){
int temp = nums[s];
nums[s] = nums[e];
nums[e] = temp;
s++;
e--;
}
}
return s;
}