归并排序(初步)
来源:互联网 发布:php服务器程序招聘 编辑:程序博客网 时间:2024/05/17 09:05
时间复杂度O(nlogn)
用处一就是求逆序对的个数
首先保证两个数组是有序的,然后是利用中间数组的插入排序
归并排序本身很好理解。详情看代码即可
<span style="font-size:18px;">#include <iostream>#include <cstdio>using namespace std;//将有二个有序数列a[first...mid]和a[mid...last]合并。void mergearray(int a[], int first, int mid, int last, int temp[])//a表示待排序的数组。first表示第一个元素,last表示最后一个元素{ int i = first, j = mid + 1;//将从first到last的数组a分为两部分,左侧和右侧,且两侧都已经是排好序的了 int k = 0; while (i <= mid && j <= last) { if (a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while (i <= mid) temp[k++] = a[i++]; while (j <= last) temp[k++] = a[j++]; //将中间数组的内容全部写入到待排序数组中 for (i = 0; i < k; i++) a[first + i] = temp[i];}void mergesort(int a[], int first, int last, int temp[])//a为待排序的数组.first表示第一个元素,last表示最后一个元素{ if (first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); //左边有序 mergesort(a, mid + 1, last, temp); //右边有序 mergearray(a, first, mid, last, temp); //再将二个有序数列合并 }}int main(){ int a[1000]; int p[1000]; int n; printf("请输入数组的长度"); cin>>n; for(int i = 0; i < n; i ++) { cin>>a[i]; } mergesort(a, 0, n - 1, p); for(int i = 0; i < n; i ++) { cout<<a[i]<<endl; }}</span>
此为已知两个有序数组再排序
<span style="font-size:18px;"> //经典的归并代码int i = 0,j = 0,k = 0;while (i<k1 && j<k2) {if (pcmp(ying[i],shu[j])) {c[k++]=ying[i++];}else {c[k++]=shu[j++];}}while (i<k1) c[k++]=ying[i++];while (j<k2) c[k++]=shu[j++]; }</span>
0 0
- 归并排序(初步)
- 归并排序初步
- 合并排序(归并)
- 归并排序(ASC)
- 归并排序(C)
- 归并排序(MergeSort)
- 归并排序(上)
- 归并排序(下)
- 归并排序(java)
- POJ2299(归并排序)
- 归并排序(MergeSort)
- 归并排序(模版)
- (Java)归并排序
- 归并排序(MergeSort)
- 归并排序(数组)
- 分治(归并排序)
- 归并排序(分治)
- 归并排序(四)
- tjut 5299
- 序列化与反序列化
- SpringMVC之TCP协议三次握手过程分析(二)
- SICP 习题1.46 iterative-improve
- Spring配置声明式事务--注解方式
- 归并排序(初步)
- js学习笔记(构造器对象、原型对象)
- 框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)
- Java中的static关键字解析
- 程序员福利:各大平台免费接口,非常实用
- Linux下Clock skew detected的解决办法
- HTTP/1.1详解
- SpringMVC之http的请求响应模型(三)
- CAN波特率计算的内幕