import java.util.Arrays; public class Solution { public int[] MySort (int[] arr) { //调用库函数sort; Arrays.sort(arr); return arr; } }
import java.util.*; import java.util.Arrays; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @return int整型一维数组 */ public int[] MySort (int[] arr) { // write code here if(arr.length<2) { return arr; } for(int i=0;i<arr.length-1; i++) { for(int j=0;j<arr.length-i-1;j++) { if(arr[j]>arr[j+1]) { swap(arr,j,j+1); } } } return arr; } public void swap(int[]arr,int i,int j) { int tmp; tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } }
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) { mergeSort(arr,0,arr.length-1); return arr; } public void mergeSort(int[] arr,int l,int r){ if(l==r){ return; } int mid =(l+r)/2; //中点位置,即(l+r)/2 mergeSort(arr,l,mid); mergeSort(arr,mid+1,r); merge(arr,l,mid,r); } public void merge(int[] arr,int l,int mid,int r){ int [] help= new int[r-l+1]; //辅助数组 int i=0; int p1=l; //左半数组的下标 int p2=mid+1; //右半数组的下标 //判断是否越界 while(p1<=mid && p2<=r){ help[i++]=arr[p1]<arr[p2] ? arr[p1++] : arr[p2++]; } //p1没有越界,说明p2越界了,将左边剩余元素拷贝到辅助数组 while(p1<=mid){ help[i++]=arr[p1++]; } //p2没有越界,说明p1越界了 while(p2<=r){ help[i++]=arr[p2++]; } //将辅助数组元素拷贝会原数组 for(i=0;i<help.length;i++){ arr[l+i]=help[i]; } } }
//判断该结点与父结点的大小,大结点一直往,建立大根堆 public static void heapInsert(int[] arr,int index){ while(arr[index]>arr[(index-1)/2]){ swap(arr,index,(index-1)/2); index=(index-1)/2; } } //一个值变小往下沉的过程 public static void heapify(int[] arr,int index,int size){ int left=index*2+1; while(left<size){ int largest = left + 1 < size && arr[left+1] > arr[left] ? left+1 : left; largest = arr[largest] > arr[index] ? largest :index; if(largest==index){ break; } swap(arr,largest,index); index=largest; left=index*2 +1; } }
public int[] MySort (int[] arr) { heapSort(arr); return arr; } public static void heapSort(int[] arr){ if(arr == null || arr.length<2){ return; } for(int i=0;i<arr.length;i++){ heapInsert(arr,i); //构造完全二叉树 } int size = arr.length; swap(arr,0,--size); while(size>0){ heapify(arr,0,size);// 最后一个数与根交换 swap(arr,0,--size); } } //判断该结点与父结点的大小,大结点一直往,建立大根堆 public static void heapInsert(int[] arr,int index){ while(arr[index]>arr[(index-1)/2]){ swap(arr,index,(index-1)/2); index=(index-1)/2; } } //一个值变小往下沉的过程 public static void heapify(int[] arr,int index,int size){ int left=index*2+1; while(left<size){ int largest = left + 1 < size && arr[left+1] > arr[left] ? left+1 : left; largest = arr[largest] > arr[index] ? largest :index; if(largest==index){ break; } swap(arr,largest,index); index=largest; left=index*2 +1; } } //交换函数 public static void swap(int[] arr, int i, int j){ int tmp; tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; }