堆排序
import java.util.Scanner; import java.util.Arrays; class Main{ static int heap[] ; static int heapSize ; //堆元素个数 public static void buildMaxHeap(){ //建造最大堆 int len = (heap.length-2)/2; for(int i=len;i>=0;i--) maxify(i); } public static void maxify(int start){ //最大化以start为顶点的堆 int i = start,j = 2*i+1; int temp = heap[i]; while(j<heapSize){ if(j+1<heapSize&&heap[j]<heap[j+1]) //找左右孩子中最大的一个 j++; if(temp>=heap[j]) break; else{ heap[i] = heap[j]; i = j; j = j*2+1; } } heap[i] = temp; //找到合适位置将heap[start]插入 } public static void swap(int i,int j){ int temp = heap[i]; heap[i] = heap[j]; heap[j] = temp; } public static void heapSort(){ //堆排序 buildMaxHeap(); for(int i=heap.length-1;i>=1;i--){ swap(0,i); //将堆顶元素与最后一个值交换 heapSize--; //堆大小减1 maxify(0); //最大化堆顶元素 } } public static void main(String[] args){ Scanner in = new Scanner(System.in); heapSize = in.nextInt(); //输入数据量 heap = new int[heapSize]; for(int i=0;i<heapSize;i++){ heap[i] = (int)(Math.random()*100); //生成随机值 } System.out.println("未排序时:"); System.out.println(Arrays.toString(heap)); heapSort(); System.out.println("排序后:"); System.out.println(Arrays.toString(heap)); } }