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

本文介绍了根号n分治排序的C语言实现,通过将数组划分为根号n个子数组,递归排序后再合并,详细阐述了分治算法的思想,并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

根号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++]; //将左边元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值