太狠了,让三分钟写完一个……手残的我废了
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{1,9,5,6,3,8,100,0,-1};
System.out.println("初始顺序:"+Arrays.toString(arr));
sort(arr);
System.out.println("升序结果:"+Arrays.toString(arr));
}
public static void sort(int[] arr){
for (int i = arr.length/2-1; i >=0 ; i--) {
adjust(arr,i,arr.length);//进行第一次的筛选(调整)
}
for (int i = arr.length-1; i >0 ; i--) {
swap(arr,0,i);//筛选过后每次挑出最大的,放到最后
adjust(arr,0,i);//继续筛选
}
}
public static void adjust(int[] arr,int i,int len){//调整
int now = arr[i];
for(int k=i*2+1;k<len;k=k*2+1){
if(k+1<len&&arr[k]<arr[k+1])k++;//如果右孩子比左孩子大就交换
if(arr[k]>now) {
arr[i] = arr[k];
i = k;
}else break;
}
arr[i] = now;
}
public static void swap(int[] arr,int a,int b){//普通的交换函数
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}