原路归并排序
来源:互联网 发布:推荐算法有哪些 编辑:程序博客网 时间:2024/05/02 00:51
//原地归并排序不需要辅助数组即可归并。关键在于merge这个函数。#include<iostream>using namespace std;void reverse(int *data,int n){for(int i=0;i<n/2;i++){swap(data[i],data[n-i-1]);}}//将含有n个元素的E数组向左循环移位i个位置void exchange(int *data,int n,int i){reverse(data,i);reverse(data+i,n-i);reverse(data,n);}void merge(int *data,int start,int mid,int end){int i=start;int j=mid;int k=end;while(i<j&&j<=k){int step=0;while(i<j && data[i]<=data[j])++i;while(j<=k && data[i]>=data[j]){++j;++step;}//data+i为子数组的首地址,j-i为子数组元素的个数,j-i-step为左循环移位的个数exchange(data+i,j-i,j-i-step);i=i+step;//下一个比较的元素}for(int i=0;i<10;i++)cout<<data[i]<<" ";cout<<"\n"<<endl;}void MergeSort(int *data,int start,int end){if(start<end){int mid=(start+end)/2;MergeSort(data,start,mid);MergeSort(data,mid+1,end);merge(data,start,mid+1,end);}}void main(){int data[]={6,4,3,1,7,8,2,9,5,0};int len=sizeof(data)/sizeof(int);MergeSort(data,0,len-1);for(int i=0;i<len;i++)cout<<data[i]<<" ";cout<<endl;}
0 0
- 原路归并排序
- 原路归并
- [原]归并排序的java递归实现
- 归并排序:二路归并
- 归并排序--二路归并
- 归并排序(2-路归并排序)
- 归并排序、二路归并排序
- 2路归并排序
- 多路归并排序
- 二路归并排序
- 两路归并排序
- 二路归并排序
- 二路归并排序
- 多路归并排序
- k路归并排序
- 二路归并排序
- 二路归并排序
- 多路归并排序
- 基于power supply信息传递的uevent机制
- php导出word文档样式,与需求给你的word文档一模一样。
- Node.js 之基于文件的模块系统
- Cocos Studio工程分析
- android 改变ImageView的颜色(Alpha值、Red值、Green值、Blue值)
- 原路归并排序
- 存储过程与游标
- Redis AOF持久化
- python脚本调用c/c++库,以opencv的python接口为例
- POJ 2828 Buy Tickets(线段树)
- xrdp安装配置
- muduo事件循环类图简介
- C - The C Answer (2nd Edition) - Exercise 1-2
- 解析XML字段