开发者社区> 问答> 正文

求C语言快排非递归算法解析。非递归。。

求C语言快排非递归算法解析。非递归。。

展开
收起
知与谁同 2018-07-21 20:22:30 1878 0
2 条回答
写回答
取消 提交回答
  • 社区管理员
    //快排非递归算法

    void merge(int a[], int low, int center, int high){//这里的merge与教科书上有不同。我们用两个数组L[],R[]来存储a[]需要合并的两段

    int i = 0;
    int j = 0;
    int k = 0;
    int count = 0;

    if(low >= high) return;

    int m = center - low + 1;
    int n = high - center;

    int *L = (int *)malloc(sizeof(int)*SCALE);
    int *R = (int *)malloc(sizeof(int)*SCALE);

    if(!L || !R){
    printf("归并排序merge()内存分配故障。");
    exit(0);
    }

    for( count=0; count<=m; count++){
    L[count] = a[low+count];
    }
    for( int count=0; count<=n; count++){
    R[count] = a[low+count+m];
    }

    for(i=0,j=0,k=low; i<m&&j<n; ++k){
    if( L[i] <= R[j] ){
    a[k] = L[i++];
    }
    else{
    a[k] = R[j++];
    }
    }

    while(i < m){
    a[k++] = L[i++];
    }
    while(j < n){
    a[k++] = R[j++];
    }
    free(L);
    free(R);
    }
    2019-07-17 22:55:33
    赞同 展开评论 打赏
  • 12535
    可以等一下嘛,,我这好像有,
    2019-07-17 22:55:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像