美文网首页
常用排序算法之堆排序

常用排序算法之堆排序

作者: Andy周 | 来源:发表于2016-07-26 20:59 被阅读51次

    堆排序算法

    /**
         * 堆排序
         *
         * @param array
         * @return
         */
        public static int[] heapSort(int[] array) {
            int arrayLength = array.length;
            for (int i = 0; i < arrayLength - 1; i++) {
                buildMaxHeap(array, arrayLength - 1 - i);
                swap(array, 0, arrayLength - 1 - i);
            }
            return array;
        }
    
    
        private static void swap(int[] data, int i, int j) {
            int tmp = data[i];
            data[i] = data[j];
            data[j] = tmp;
        }
    
        private static void buildMaxHeap(int[] data, int lastIndex) {
            for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
                int k = i;
                while (k * 2 + 1 <= lastIndex) {
                    int biggerIndex = 2 * k + 1;
                    if (biggerIndex < lastIndex) {
                        if (data[biggerIndex] < data[biggerIndex + 1]) {
                            biggerIndex++;
                        }
                    }
    
                    if (data[k] < data[biggerIndex]) {
                        swap(data, k, biggerIndex);
                        k = biggerIndex;
                    } else {
                        break;
                    }
                }
            }
        }
    

    运行

    /**
         * 待排序的数组
         */
        private static int[] array = {
                12, 10, 5, 9, 5, 32, 16, 1, 9, 99, 80, 3, 18, 19, 20, 25, 7, 15
        };
    
        public static void main(String[] args) {
    
            int[] result = SortUtils.heapSort(array.clone());
            System.out.println(Arrays.toString(result));
    
        }
    

    输出

    [1, 3, 5, 5, 7, 9, 9, 10, 12, 15, 16, 18, 19, 20, 25, 32, 80, 99]
    

    相关文章

      网友评论

          本文标题:常用排序算法之堆排序

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