递归排序运行实例


看了几天的递归,总结下经验,看这篇文章前,如果你没有学习过递归这种思想,请看下这个网站,讲的挺不错

http://www.tudou.com/listplay/SaZl9xKGqDE/hFFCJz8mBDM.html

之后你可以理解下写的这个递归排序小应用。

<textarea readonly="readonly" name="code" class="c">

#include<stdio.h>

#include<stdlib.h>
//merge函数就是在小程序里(!注意一定要明确是递归的小程序,而不是全部)
//不断合并
void merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex)
{
    int i,j,k;
    i=startIndex;j=midIndex+1;k=startIndex;
    while(i!=midIndex+1 && j!=endIndex+1)
    {
        if(sourceArr[i]<sourceArr[j])
            tempArr[k++]=sourceArr[i++];
        else
            tempArr[k++]=sourceArr[j++];}
    while(i!=midIndex+1)
        tempArr[k++]=sourceArr[i++];
    while(j!=endIndex+1)
        tempArr[k++]=sourceArr[j++];
    for(i=startIndex;i<=endIndex;i++)
        sourceArr[i]=tempArr[i];

}
//mergesort函数就是一个递归并且合并的函数引用
void mergesort(int sourceArr[],int tempArr[],int startIndex,int endIndex)
{
    int midIndex;
    if(startIndex<endIndex)
    {
        midIndex=(startIndex+endIndex)/2;
        mergesort(sourceArr,tempArr,startIndex,midIndex);
        mergesort(sourceArr,tempArr,midIndex+1,endIndex);
        merge(sourceArr,tempArr,startIndex,midIndex,endIndex);
    }

}
int main()
{
    int a[8]={50,20,20,30,70,40,80,60};
    int b[10],i;
    mergesort(a,b,0,7);
    for(i=0;i<=7;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;

}

</textarea>


更新代码:

#include <iostream>
#include <stdio.h>
using namespace std;

void merge(int arr[],int L,int M,int R)
{
    int left_size=M-L+1;
    int right_size=R-M;
    int left[left_size],right[right_size];
    int i,j,k;

    //fill into left array and right array
    for(i=L;i<=M;i++)
        left[i-L]=arr[i];
    for(i=M;i<=R;i++)
        right[i-M]=arr[i+1];
    //pick up two arrays which is smaller
    i=0;j=0;k=L;
    while(i<left_size && j<right_size)
    {
        if(left[i]<right[j])
            {
                arr[k]=left[i];
                k++;i++;
            }
            else
            {
                arr[k]=right[j];
                k++;j++;
            }
    }
    while(i<left_size)
    {
        arr[k]=left[i];
        k++;i++;
    }
    while (j<right_size)
    {
        arr[k]=right[j];
        k++;j++;
    }
}

void mergeSort(int arr[],int L,int R)
{
    if(L==R)
        return ;
    else
    {
        int M=(L+R)/2;
        mergeSort(arr,L,M);
        mergeSort(arr,M+1,R);
        merge(arr,L,M,R);
    }
}

int main()
{
    int arr[]={2,4,6,9,8,1,3,5,7};
    int L=0;
    int R=7;
    int M=3;
    int i;
    mergeSort(arr,L,R);
    for(i=0;i<=R;i++)
        printf("%d ",arr[i]);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值