zoukankan      html  css  js  c++  java
  • 快排,堆排

    // 堆排,0号位置不存数
    void head_adjust(int arr[], int k, int size_adjust){
        arr[0] = arr[k];
        int i;
        for (i=2*k ; i <= size_adjust ; i*=2){
            if (i+1<= size_adjust && arr[i] <arr[i+1])
                i +=1;
            if (arr[0]>= arr[i])
                break;
            else{
                arr[k] = arr[i];
                k = i;
            }
        }
        arr[k] = arr[0];
    }
    
    void build_max_heap(int *arr, int size){
        for (int i= size/2; i>0; i--){
            head_adjust(arr, i, size);
        }
    }
    
    void heap_sort(int arr[], int size){
        int new[size+1],i;
        for (i = 1; i<= size; i++)
            new[i] = arr[i-1];
        build_max_heap( new,size);
        for (i = 1; i<size; i ++){
            new[0] = new[1];
            new[1] = new[size - i+1];
            new[size - i+1] = new[0];
            head_adjust(new, 1, size-i);
        }
        for (i =0; i <=size; i++)
            arr[i] = new[i+1];
    }
    
    // 快排,0号位被利用,start=0,end = size-1
    int partition(int arr[],int low, int high){
        int pivot = arr[low];
        while (low <high){
            while(low <high && arr[high] >=pivot)   high--;
            arr[low] = arr[high];
            while(low <high && arr[low] <= pivot)   low++;
            arr[high] = arr[low];
        }
        arr[low] = pivot;
        return low;
    }
    void quick_sort_inside(int arr[], int start, int end){
        int pivot = partition(arr,start,end);
        if (start < pivot-1) quick_sort_inside(arr, start, pivot-1);
        if (end > pivot+1) quick_sort_inside(arr, pivot+1, end);
    }
    
  • 相关阅读:
    用c#开发微信 (7) 微渠道
    Swift语言精要
    Android开发点滴
    UITableViewAutomaticDimension
    iOS中ActionSheet和Alert的区别
    本博客申明
    iOS中重用UITableView单元格时,千万别忘了这个
    Swift 2 语言精要
    Objective-C中NSString与int和float的相互转换
    Android Studio常用快捷键
  • 原文地址:https://www.cnblogs.com/gallien/p/14320028.html
Copyright © 2011-2022 走看看