根号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++]; //将左边元