zoukankan      html  css  js  c++  java
  • 基础算法(二):堆排序,快速排序

    基本的算法

    堆排序,快速排序

    堆排序:

    package alg;
    
    import java.util.Arrays;
    
    /**
     * @author zha
     * 算法的复杂度为O(nlogn)
     */
    public class HeapSort {
    
        public static void main(String[] args) {
            int[] array = { 5, 2, 4, 6, 1, 3, 23, 434, 55, 6, 788, 89, 0 };
            heapSort(array, 0 , array.length- 1);
            System.out.println(Arrays.toString(array));
    
        }
    
        private static void heapSort(int[] array, int from, int to) {
            buildHeap(array,from,to);
            int length = to - from +1;
            swap(array,from,to);
            while(length > 1){
                for (int i = to - 1; i >= from; i--) {
                    buildHeap(array, from, i);
                    swap(array, i, from);
                }
                length--;
            }
            
        }
    
        private static void buildHeap(int[] array, int from, int to) {
            int length = to - from +1;
            int mid = from + (length >> 1);
            for (int i = mid ; i >= 0 ;i--) {
                MAXHeap(array,from ,to, i);
            }
        }
    
        private static void MAXHeap(int[] array, int from, int to, int index) {
            int left = left(index);
            int right = right(index);
            int lagest = 0;
            if(left <= to && array[left] > array[index]){
                lagest = left;
            }else{
                lagest = index;
            }
            
            if(right <= to && array[right] > array[lagest]){
                lagest = right;
            }
            
            if(lagest != index){
                swap(array,index,lagest);
                MAXHeap(array, from,to,lagest);
            }
        }
    
        private static void swap(int[] array, int i, int j) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            
        }
    
        private static int left(int i){
            return 2*(i+1)-1;
        }
        
        private static int right(int i){
            return 2*(i+1);
        }
    }

    快速排序:

  • 相关阅读:
    谷歌分析配置行为事件
    CentOS7.6下模拟iSCSI,Windows来连
    2.CentOS6.5下的DNS主从区域传送配置
    1.CentOS6.5下的基础DNS配置
    CentOS下搭建DHCP服务
    思科设备配置DHCP服务
    思科网络设备配置AAA认证
    vsftpd文件虚拟用户搭建
    Windows网络服务渗透攻击分类
    使用脚本来监控新建进程及其父进程以及他们的命令行
  • 原文地址:https://www.cnblogs.com/zhailzh/p/4096221.html
Copyright © 2011-2022 走看看