21xrx.com
2024-06-03 01:19:11 Monday
登录
文章检索 我的文章 写文章
C++合并排序代码
2023-07-13 08:30:04 深夜i     --     --
C++ 合并排序 代码

C++合并排序是一种比较常见的排序算法,它将一个数组分成两个部分,对每个部分进行排序,然后将它们合并成一个排好序的数组。在这个过程中,使用了分治策略,将大问题拆分成小问题,然后逐步解决,最终得到解决大问题的结果。下面是一个使用C++语言实现的合并排序的代码片段。


void merge(int *arr, int left, int mid, int right){

  int i, j, k;

  int n1 = mid - left + 1;

  int n2 = right - mid;

  int L[n1], R[n2];

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

    L[i] = arr[left+i];

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

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

  i = 0;

  j = 0;

  k = left;

  while(i < n1 && j < n2){

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

      arr[k] = L[i];

      i++;

    }

    else{

      arr[k] = R[j];

      j++;

    }

    k++;

  }

  while(i < n1){

    arr[k] = L[i];

    i++;

    k++;

  }

  while(j < n2){

    arr[k] = R[j];

    j++;

    k++;

  }

}

void mergeSort(int *arr, int left, int right){

  if(left < right){

    int mid = left + (right - left) / 2;

    mergeSort(arr, left, mid);

    mergeSort(arr, mid+1, right);

    merge(arr, left, mid, right);

  }

}

这个代码片段中,有两个函数,分别是`merge`和`mergeSort`。`merge`函数是用来合并两个排好序的子数组的,`mergeSort`函数则是用来排序整个数组的。

`merge`函数中,首先计算出左右两个子数组的大小,然后分别创建两个数组`L`和`R`,用来存储左右两个子数组。接着,使用一个`while`循环,将左右两个子数组中的元素合并到原数组中,并保证原数组排好序。

`mergeSort`函数使用了递归的方式,将大数组拆分成小数组进行排序。首先检查左右子数组的大小是否大于1,如果是,则使用递归继续拆分。最后,调用`merge`函数将两个子数组合并。

总之,C++合并排序是一种高效的排序算法,它使用了分治策略和递归技术,能够对大数据量的数组进行快速排序。我们可以根据自己的需求,对C++合并排序进行优化和定制化,以满足不同的场景需求。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复