快速排序:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
public int[] MySort (int[] arr) {
quickSort(arr , 0 , arr.length-1);
return arr;
}
public void quickSort(int[] list, int left, int right) {
if (left < right) {
// 分割数组,找到分割点
int point = partition(list, left, right);
// 递归调用,对左子数组进行快速排序
quickSort(list, left, point - 1);
// 递归调用,对右子数组进行快速排序
quickSort(list, point + 1, right);
}
}
/**
* 分割数组,找到分割点
*/
public int partition(int[] list, int left, int right) {
// 用数组的第一个元素作为基准数
int first = list[left];
while (left < right) {
while (left < right && list[right] >= first) {
right--;
}
// 交换
swap(list, left, right);
while (left < right && list[left] <= first) {
left++;
}
// 交换
swap(list, left, right);
}
// 返回分割点所在的位置
return left;
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
归并排序:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
public int[] MySort (int[] arr) {
// write code here
mergeSort(arr, 0, arr.length-1);
return arr;
}
public void mergeSort(int[] arr, int left, int right) {
if (left >= right)
return;
int mid = (left + right)/2;
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,left,mid,right);
}
public void merge(int[] arr, int left, int mid, int right) {
int p1 = left;
int p2 = mid + 1;
int[] temp = new int[right - left+ 1];
int ptemp = 0;
while (p1<=mid && p2<=right) {
if(arr[p1] <= arr[p2]) {
temp[ptemp++] = arr[p1++];
} else {
temp[ptemp++] = arr[p2++];
}
}
while (p1<=mid){
temp[ptemp++]=arr[p1++];
}
while (p2<=right){
temp[ptemp++]=arr[p2++];
}
//从临时数组拷贝到原数组
for (int j=0; j<temp.length;j++) {
arr[j+left] = temp[j];
}
}
}