算法学习笔记--归并排序

本文介绍了一种高效的排序算法——归并排序,并详细展示了其核心实现过程。通过递归将数组分成更小的部分进行排序,然后合并这些部分。文章提供了一个具体的示例,演示了如何使用归并排序对整数数组进行排序。
//时间复杂度O(nlg(n))
void Merge(int a[],int p,int q,int r) {
    int n1 = q - p + 1,n2 = r - q,L[n1 + 1],R[n2 + 1];

    for (int i = 0; i < n1; i++)
        L[i] = a[p + i];
    for (int j = 0; j < n2; j++)
        R[j] = a[q + j+1];

    int i = 0, j = 0;
    for (int k = p; k < r+1; k++) {   //注意p ,r+1
        if (L[i] <= R[j]) {
            a[k] = L[i];
            i++;
        } else {
            a[k] = R[j];
            j++;
        }
    }


}


void MergeSort(int a[],int first,int last){ //first a 有效下标的第一个从0 开始,a中有效下标的下一个
  if(first<last){
      int q=(first+last)/2;
      MergeSort(a,first,q);//左边有序
      MergeSort(a,q+1,last);//右边有序
      Merge(a,first,q,last);//合并两边
  }

}
int main( )
{

int a[]={5,2,4,7,1,3,2,6};
MergeSort(a,0,7);
    for (int j = 0; j < 7; j++)
       cout<<a[j]<<endl;

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值