根号n分治排序的C语言实现:

根号n分治排序的C语言实现:

算法课的这样一道题目
根号n段合并排序算法:
将数组 划分为 根号n个子数组,每个子数组有 根号n个元素。然后递归地对分割后的子数组进行排序,最后将所得到的 个排好序的子数组合并排序。

分治算法 思想:

首先随机生成一个数组,把数组和一个临时存放数据的数组传入函数RadicalSort()并且传入数组的头位置和尾位置
RadicalSort()函数中在头位置小于尾位置的时候调用,把数组分治为√n份递归的处理每个数组的问题,注意此时只是处理了√n*√n的数组后面可能还有剩余。
划分好后通过Merge()将前排序好的数组和目前需要排序的数组两两合并,需要操作√n次

代码:


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void Merge( int A[], int TmpA[], int L, int LeftEnd, int RightEnd )
{
   
     int R, NumElements, Tmp;
     int i;

     R=LeftEnd+1;
     Tmp = L;         // 有序序列的起始位置
     NumElements = RightEnd - L + 1;

     while( L <= LeftEnd && R <= RightEnd ) {
   
         if ( A[L] <= A[R] )
             TmpA[Tmp++] = A[L++]; //将左边元
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值