- package com.eshore.sweetop.sort;
- import java.util.Arrays;
- public class Heap {
- private static int parent(int i) {
- return (i-1) >> 1;
- }
- private static int left(int i) {
- return i << 1|1;
- }
- private static int right(int i) {
- return (i+1) << 1;
- }
- private static int heapSize(int[] a, int i) {
- if(left(i)>=a.length){
- return 1;
- }
- if(right(i)>=a.length){
- return 2;
- }
- return heapSize(a,left(i))+heapSize(a,right(i))+1;
- }
- private static void maxHeapify(int[] a, int i,int size) {
- int l = left(i);
- int r = right(i);
- int largest = -1;
- if (l < size && a[l] > a[i]) {
- largest = l;
- } else {
- largest = i;
- }
- if (r < size && a[r] > a[largest]) {
- largest = r;
- }
- if (largest != i) {
- a[i] ^= a[largest];
- a[largest] ^= a[i];
- a[i] ^= a[largest];
- maxHeapify(a, largest,size);
- }
- }
- public static void sort(int[] a){
- buildMaxHeap(a);
- int size=a.length;
- for(int i=a.length-1;i>0;i--){
- a[0]^=a[i];
- a[i]^=a[0];
- a[0]^=a[i];
- size--;
- maxHeapify(a,0,size);
- }
- }
- public static void buildMaxHeap(int[] a){
- for(int i=a.length/2-1;i>-1;i--){
- maxHeapify(a,i,a.length);
- }
- }
- public static void main(String[] args) {
- int[] a={4,1,3,2,16,9,10,14,8,7};
- sort(a);
- System.out.println(Arrays.toString(a));
- }
- }
算法-----堆排序
最新推荐文章于 2024-03-23 20:06:26 发布