归并排序
来源:互联网 发布:linux 发送post请求 编辑:程序博客网 时间:2024/06/18 06:11
#include<iostream>using namespace std;/*新增2个数组,数组A存放arr[begin,mid],数组B存放arr[mid+1,end]并且在数组A和B之后添加一个INF的数字,这样可以避免判断A和B有一个读取完了的情况*/void Merge(int* arr, int begin, int mid, int end){ int n1 = mid - begin + 1; int n2 = end - mid; int* A= new int[n1+1]; int* B = new int[n2+1]; for (int i = 0; i < n1; i++) { A[i] = arr[begin + i]; } cout << endl; for (int i = 0; i < n2; i++) { B[i] = arr[mid+1 + i]; } cout << endl; A[n1] = 0x7fffffff; B[n2] = 0x7fffffff; int index1 = 0; int index2 = 0; for (int i = begin; i <= end; i++) { if (A[index1] <= B[index2]) { arr[i] = A[index1]; index1++; } else { arr[i] = B[index2]; index2++; } } delete[] A; delete[] B;}void MergeSort(int* arr,int begin,int end){ if (begin < end) { int mid = (begin + end) / 2; MergeSort(arr, begin, mid); MergeSort(arr, mid + 1, end); Merge(arr, begin, mid, end); }} static const int len = 1000;int main(){ int arr[len]; for (int i = 0; i < len; i++) { arr[i] = len - i; } MergeSort(arr, 0, len - 1); for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl; return 0;}
程序的运行结果
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Oracle JDK7 and JRE7 认证过的系统配置
- JQuery选择器和jsp
- 树莓派3如何安装FreeBSD
- etcd+confd实现docker无状态部署
- 算法导论2.3-7
- 归并排序
- macOS Sierra开启HiDPI的方法
- 小程序setData
- 压缩算法——FLAC (Free Lossless Audio Codec)编码原理
- Java多线程系列--Callable和Future
- 【Git零基础教程】(1)介绍/创建
- Java 并发编程 锁与同步器
- 抽象工厂模式(Abstract Factory Pattern)。
- 判断List<实体bean>中是否含有某个实体bean