zoukankan      html  css  js  c++  java
  • 二分归并排序

    1.     问题

    二分归并排序:对n个不同的数构成的数组A[1….n]进行排序,其中n=2^k.

    2.     解析

    二分归并排序:

           将一个数组分割,分割成两个部分,递归分割下去,直到剩余数组元素个数不满足分割条件,就将分割的数组进行排序,然后在递归上去,将分割的序列形成的有序数组进行合并,最后形成一个有序的数组。具体例子如下图:

          

    3.     设计

    递归分组函数:

               int MergeSort(int A[],int l,int r){

                   if(l<r){

                       mid=(l+r)/2;

                       MergeSort(A,l,mid);

                        MergeSort(A,mid+1,r);

                       Merge(A,l,mid,r);

                   }

               }

    合并函数

           void Merge(int A[], int l, int mid, int r)

    {

                  int *L, *R,x,y;

                  x=mid-l+1,y=r-mid;

                  L = (int*)malloc(sizeof(int)*x);

                  R = (int*)malloc(sizeof(int)*y);

                  int i ,j;

                  for (i=0; i <x; i++)

                         L[i] = A[i +l];

                  for (j=0; j < y; j++)

                         R[j] = A[j + mid + 1];

                  i = j = 0;

                  int k = l;

                  while (i <x && j <y)

                  {

                         if (L[i] <= R[j])

                                A[k++] = L[i++];

                         else

                                A[k++] = R[j++];

                  }

                  while (i < x)

                         A[k++] = L[i++];

                  while (j <y)

                         A[k++] = R[j++];

                  free(L);

                  free(R);

    }

    4.     分析

     

    5.     源码

    kitalekita/二分归并.cpp at main · kitalekita/kitalekita (github.com)  

  • 相关阅读:
    ExecutorService与Executors例子的简单剖析
    java中线程队列BlockingQueue的用法
    mysql常用语句
    dubbo+zookeeper例子
    大型网站架构系列:消息队列(二)
    大型网站架构系列:分布式消息队列(一)
    什么是Code Review(转)
    Ehcache 整合Spring 使用页面、对象缓存
    java 多线程——quartz 定时调度的例子
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
  • 原文地址:https://www.cnblogs.com/kitalekita/p/14592447.html
Copyright © 2011-2022 走看看