import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
public int[] MySort (int[] arr) {
//return bubbleSort(arr);
//return selectSort(arr);
//return insertSort(arr);
return quickSort(arr,0,arr.length - 1);
}
//冒泡排序
public int[] bubbleSort (int[] arr) {
int len = arr.length;
for (int i = 1; i < len; i++) {
for (int j = 0; j < len - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
//选择排序
public int[] selectSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len; i++) {
int k = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[k]) {
k = j;
}
}
swap(arr, i, k);
}
return arr;
}
//直接插入排序
public int[] insertSort(int[] arr) {
int len = arr.length;
for (int i = 1; i < len; i++) {
int temp = arr[i], j = i;
while (j > 0 &&
temp < arr[j - 1]) { //当j-1>=0且待插入元素小于j位的前一位元素时
arr[j] = arr[j - 1]; //前一位元素后移
j--;
}
arr[j] = temp;
}
return arr;
}
//快速排序
public int[] quickSort(int[] arr, int left, int right) {
if (left < right) {
int pos = partition(arr,left,right);
quickSort(arr, left, pos - 1);
quickSort(arr, pos + 1, right);
}
return arr;
}
//分区
public int partition(int[] arr, int left, int right) {
Random r = new Random();
int p = (int) r.nextDouble() * (right - left) +
left; //随机一个在[left,right]间的数
swap(arr, p, left);
int baseNum = arr[left];
while (left < right) {
while (left < right && arr[right] > baseNum) right--;
while (left < right && arr[left] < baseNum) left++;
if(left < right) swap(arr,left,right);
}
arr[left] = baseNum;
return left;
}
public void swap(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}