C++实现归并排序(MergeSort) 在这里,我们将详细介绍C++实现归并排序(MergeSort)的知识点。归并排序是一种稳定的排序算法,它的思路是将数组不断地分割成两个子序列,直到每个子序列只有一个元素为止,然后将这些子序列从小到大合并为一个序列。 我们来看一下归并排序的思路: 1. 划分:一直调用划分过程,直到子序列为空或只有一个元素为止,共需log2(n)。 2. 归并:将两个子序列从小到大合并为一个序列。 下面是C++实现归并排序的程序代码: ```c #include using namespace std; // 合并两个有序的序列 template void Merge(T arr[], int start, int mid, int end) { int i, j, k, n1, n2; k = 0; n1 = mid - start + 1; n2 = end - mid; T *L = new T[n1], *R = new T[n2]; for (i = 0; i < n1; i++) // 将arr的左部分赋给L L[i] = arr[start + i]; for (j = 0; j < n2; j++) // 将arr的右部分赋给R R[j] = arr[mid + j + 1]; i = 0; j = 0; k = start; 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]; k++; i++; } while (j < n2) { // 右部分没处理完 arr[k] = R[j]; k++; j++; } delete[] L; delete[] R; } // 归并排序 template void MergeSort(T arr[], int start, int end) { int mid; if (start >= end) return; mid = (start + end) / 2; MergeSort(arr, start, mid); MergeSort(arr, mid + 1, end); Merge(arr, start, mid, end); } // 输出数组 template void Print(T arr[], int n) { int i; for (i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; } int main(int argc, const char *argv[]) { int n, i, arr[50]; cout << "请输入要排序的数的个数:"; cin >> n; srand((int)time(NULL)); // 设置时间为随机点 for (i = 0; i < n; i++) // 产生n个随机数 arr[i] = rand() % 100; cout << "排序前:"; Print(arr, n); MergeSort(arr, 0, n - 1); // 调用归并排序 cout << "排序后:"; Print(arr, n); return 0; } ``` 通过上面的代码,我们可以看到,归并排序的实现是通过递归地将数组分割成两个子序列,然后将这些子序列从小到大合并为一个序列。我们可以通过Print函数来输出排序后的结果。 C++实现归并排序是一种高效的排序算法,它的时间复杂度为O(n log n),且它是一种稳定的排序算法,适合大规模数据的排序。
2025-12-02 12:11:38 45KB 归并排序
1
快速排序、归并排序、堆排序 并比较排序时间 数据结构与算法
1
我简单的绘制了一下排序算法的分类,蓝色字体的排序算法是我们用python3实现的,也是比较常用的排序算法。 Python3常用排序算法 1、Python3冒泡排序——交换类排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢”浮”到数列的顶端。 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。
2023-03-19 03:06:28 226KB python python3 冒泡排序
1
一个算法设计与分析的实验报告,比较归并排序与快速排序的时间差异,这里采用在一个java程序中对随机生成的任意个数分别进行两种方法的排序并记录各自的时间,最后得出结论。 本实验报告附代码以及详细解释
2023-01-14 08:59:34 406KB 快速排序 归并排序 实验报告
1
设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。
1
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
1
关于python的算法一直都是让我们又爱又恨,但是如果可以灵活运用起来,对我们的编写代码过程,可以大大提高效率,针对算法之一“归并排序”的灵活掌握,一起来看下吧~ 归并算法——小试牛刀 实例内容: 有 1 个无序列表如下: list = [23,35,12,34,54,78,76,99] 要求:使其按从小到大排序 图示思路 Python 代码 归并排序理解: 1.通过二分法把一个数组按照递归拆分为左右两组(至到独立元素为止) 2.按照从底层往高层的方法左右数组对比,同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后被放入空数组的那个位置的指针往后移一个,然后继续和另外一个数组
2022-12-14 18:13:09 156KB list排序 python python算法
1
直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、二路归并排序的C++语言实现,亲测可行,二路归并排序未得到预期结果,望指正。
2022-12-06 03:49:35 684KB Sort Algorithm
1
非递归归并排序.cpp
2022-11-02 19:19:43 1KB
1
根据实验要求和伪码信息,设计二分归并排序算法,用二分归并排序算法对给定一个长度为n的随机数组A进行排序,使得最后的输出数组为原来数组内元素的递增顺序排列。
2022-09-14 21:54:44 465B matlab 二分归并法 课程练习
1