题解 | #排序#
排序
https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896
总结:
排序查找问题最常用的几种排序,需要掌握:冒泡排序,快速排序,归并排序,堆排序,以及折中查找。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
public int[] tmp;
public int[] MySort (int[] arr) {
// write code here
//冒泡
// int len = arr.length;
// for(int i=0;i<len-1;i++)
// for(int j=len-1;j>i;j--){
// if(arr[j-1]>arr[j]){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1]=temp;
// }
// }
// return arr;
//快排
// QuickSort(arr,0,arr.length-1);
// return arr;
//归并排序
tmp = new int[arr.length];
MergeSort(arr,0,arr.length-1);
return arr;
//堆排序
// HeapSort(arr,arr.length);
// return arr;
}
public void MergeSort(int[] arr,int low,int high){
if(low<high){
int mid = low+(high-low)/2;
MergeSort(arr,low,mid);
MergeSort(arr,mid+1,high);
Merge(arr,low,mid,high);
}
}
public void Merge(int[] arr,int low,int mid,int high){
for(int i=low;i<=high;i++)
tmp[i] = arr[i];
int i,j,k;
for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){
if(tmp[i]<=tmp[j])
arr[k] = tmp[i++];
else
arr[k]=tmp[j++];
}
while(i<=mid) arr[k++] = tmp[i++];
while(j<=high) arr[k++] = tmp[j++];
}
public void QuickSort(int[] arr,int low,int high){
if(low<high){
int pivotpos = Partition(arr,low,high);
QuickSort(arr,low,pivotpos-1);
QuickSort(arr,pivotpos+1,high);
}
}
public int Partition(int[] arr,int low,int high){
int pivot = arr[low];
while(low<high){
while(low<high&&arr[high]>=pivot) high--;
arr[low] = arr[high];
while(low<high&&arr[low]<=pivot) low++;
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
//堆排序
public void HeapSort(int[] arr,int len){
BuildMaxHeap(arr,len);//建初始堆
for(int i=len-1;i>0;i--){
int tmp = arr[i];
arr[i] = arr[0];
arr[0] = tmp;
HeapAdjust(arr,0,i);
}
}
public void BuildMaxHeap(int[] arr,int len){
for(int i=len/2-1;i>=0;i--){
HeapAdjust(arr,i,len);
}
}
public void HeapAdjust(int[] arr,int k,int len){
int tmp = arr[k];
for(int i=2*k+1;i<len;i=i*2+1){
if((i<len-1)&&arr[i]<arr[i+1])
i++;
if(arr[i]>tmp){
arr[k] = arr[i];
k=i;
}else
break;
}
arr[k] = tmp;
}
}

查看12道真题和解析