1.快速排序:
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
public int[] MySort (int[] arr) {
arr=QuickSort(arr,0,arr.length-1);
return arr;
// write code here
}
public int[] QuickSort(int[] arr,int start,int end){
int rem=arr[start];
int i=start;
int j=end;
while(i<j){
while(i<j && arr[i]<rem){
i++;
}
while(i<j&&arr[j]>rem){
j--;
}
if(i<j&&arr[i]==arr[j]){
i++;
}else{
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
if(i-1>start){
arr=QuickSort(arr,start,i-1);
}
if(j+1<end){
arr=QuickSort(arr,j+1,end);
}
return arr;
}
}
2,堆排序
public void heapSort(int[] arr){
int temp=0;
for(int i=arr.length/2-1 ;i>=0;i--){
adjust(arr,i,arr.length);
}
for(int j=arr.length-1;j>0;j--){
//交换
temp=arr[j];
arr[j]=arr[0];
arr[0]=temp;
adjust(arr,0,j);
}
}
public void adjust(int[] arr,int i,int length){
int temp=arr[i];
for(int k=2*i+1;k<length;k=k*2+1){
if(k+1<length&&arr[k]<arr[k+1]){
k++;
}
if(arr[k]>temp){
arr[i]=arr[k];//较大值赋给当前节点
i=k; //i指向k,继续循环
}else{
break;
}
}
//for循环结束后,已经将以i为父节点得最大值,放到了i得位置上。
arr[i]=temp;
}