首页 > 其他 > 详细

快排,堆排

时间:2021-01-24 11:05:13      阅读:23      评论:0      收藏:0      [点我收藏+]
// 堆排,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);
}

快排,堆排

原文:https://www.cnblogs.com/gallien/p/14320028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!