题解 | #排序#

排序

https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896

/**heapsort
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 将给定数组排序
 * @param arr int整型一维数组 待排序的数组
 * @param arrLen int arr数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */

#include<stdio.h>
#include<stdlib.h>
// 打印
void printFunction( int *arr,int len){
    int i = 0;
    while(i<len){
        printf("%d\n",arr[i]);
        i++;
    }
}

void swap(int* a,int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

void heap_ify(int *arr,int start,int end){
    int dad =start;
    int son = dad*2+1;
    while(son<= end){
        if(son+1 <= end&& arr[son]<arr[son+1]){
            son++;
        }
        if(arr[dad]>arr[son])return;
        else{
            swap(arr+dad,arr+son);
            dad = son ;
            son = dad*2+1;
        }
    }
}
void heap_Sort(int *arr,int len){
  int i  ;
  for(i = (len-1-1)/2;i>=0;i--){
    heap_ify(arr,i,len-1);
  }
  for(i = len-1;i>0;i--){
    swap(arr+0,arr+i);
    heap_ify(arr,0,i-1);
  }
}

int* MySort(int* arr, int arrLen, int* returnSize ) {
    // write code here
heap_Sort(arr, arrLen);


  *returnSize = arrLen;
    return  arr;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务