//快速排序
public static void Quick(int[] nums, int start, int end){
if(start > end){
return;
}
int i = start,j = end;
int e = nums[i];
while (i < j){
while(i < j && nums[j] >= e){
j--;
}
nums[i] = nums[j];
while(i < j && nums[i] <= e){
i++;
}
nums[j] = nums[i];
}
nums[i] = e;
Quick(nums,start,i - 1);
Quick(nums, i + 1, end);
}
//归并排序
public static void MergeSort(int[] nums, int start, int end){
if(start >= end){
return;
}
//divide
int mid = (start + end) / 2;
MergeSort(nums, start, mid);
MergeSort(nums, mid + 1, end);
//conquer
Merge(nums, start, mid, end);
}
public static void Merge(int[] nums, int start, int mid, int end){
int i = start;
int j = mid + 1;
int[] temp = new int[end - start + 1];
int p = 0; //指向temp数组的待插入位置
while (i <= mid && j <= end){
if(nums[i] <= nums[j]){
temp[p] = nums[i];
i++;
p++;
}else{
temp[p] = nums[j];
j++;
p++;
}
}
while(i <= mid){
temp[p] = nums[i];
i++;
p++;
}
while(j <= end){
temp[p] = nums[j];
j++;
p++;
}
for (int k = start, l = 0; k <= end; k++,l++) {
nums[k] = temp[l];
}
}
//直接插入排序
public static void InsertionSort(int[] nums){
int len = nums.length;
for (int i = 0; i < len; i++) {
for (int j = i; j > 0; j--) {
if(nums[j] < nums[j - 1]){
int temp = nums[j];
nums[j] = nums[j -1];
nums[j - 1] = temp;
}
}
}
}
//冒泡排序
public static void BubbleSort(int[] nums){
int len = nums.length;
for (int i = len - 1; i > 0; i--) {
for (int j = 0; j < i ; j++) {
if(nums[j] > nums[j + 1]){
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
//简单选择
public static void SelectionSort(int[] nums){
int len = nums.length;
for (int i = 0; i < len - 1; i++) {
int p = i;
for (int j = i; j < len; j++) {
if(nums[j] < nums[p]){
p = j;
}
}
int temp = nums[i];
nums[i] = nums[p];
nums[p] = temp;
}
}