美文网首页
Java算法--堆排序

Java算法--堆排序

作者: code_solve | 来源:发表于2018-05-07 11:23 被阅读0次
package arithmetic;

import breeze.stats.distributions.Rand;

import java.util.Collections;
import java.util.Random;

public class HeapSort {

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6,21,24,546,65,34,65,768,9,5,2,3,5,6,344,32,12,14, 7, 8, 9};
        shuffle(arr);
        sort(arr);
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    private static void shuffle(int[] arr) {
        for (int i : arr) {
            int i1 = (int) (Math.random() * (arr.length));
            int i2 = (int) (Math.random() * (arr.length));
            swap(arr, i1, i2);
        }
    }

    public static void sort(int[] arr) {
        //1.变大根堆
        bigHeap(arr);
        //sort
        int heapsize = arr.length - 1;
        while (heapsize > 0) {
            //remove top
            swap(arr, heapsize, 0);
            heapsize--;
            goBottom(arr, heapsize, 0);
        }
    }

    private static void goBottom(int[] arr, int heapsize, int currentIndex) {
        int left = (currentIndex * 2 + 1);
        if (left > heapsize) return;

        int right = left + 1;
        int largest = right < heapsize && arr[right] > arr[left] ? right : left;
        largest = arr[largest]>arr[currentIndex]?largest:currentIndex;

        if(largest == currentIndex)return;

        swap(arr,largest,currentIndex);

        goBottom(arr,heapsize,largest);
    }

    private static void bigHeap(int[] arr) {
        int heapSize = 0;
        while (heapSize < arr.length - 1) {
            heapSize++;
            goTop(arr, heapSize);
        }
    }

    private static void goTop(int[] arr, int changeIndex) {
        int parentIndex = (changeIndex - 1) / 2;
        if (arr[parentIndex] < arr[changeIndex]) {
            swap(arr, parentIndex, changeIndex);
            goTop(arr, parentIndex);
        }
    }

    private static void swap(int[] array, int i, int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
}

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • Java算法--堆排序

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 堆排序算法思想

    前两天看了看堆排序算法,啃了半天的书,最后搞明白了堆排序算法,今天有时间给大家说说这个堆排序算法。首先讲一下算法的...

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 常用排序算法之堆排序

    堆排序算法 运行 输出

  • 堆排序

    一、堆排序 堆排序是我们所掌握的重要的排序算法之一,理解并使用,可以让我们对它的了解更加深刻: 话不多说上代码 java

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

网友评论

      本文标题:Java算法--堆排序

      本文链接:https://www.haomeiwen.com/subject/jvymrftx.html