C++ 归并排序算法实现
2016-04-07 14:22
393 查看
c++归并排序函数实现如下:
完整代码如下(包含main函数,头文件,测试数组):
void merge_sort(vector<int> &data, int start, int end) { if (start < end) { int mid = (start + end) / 2; merge_sort(data, start, mid); merge_sort(data, mid + 1, end); merge(data, start, mid, end); } } void merge(vector<int> &data, int start, int mid, int end) { vector<int> tmp; int i = start, j = mid + 1; while (i != mid + 1 && j != end + 1) { if (data[i] <= data[j]) { tmp.push_back(data[i++]); } else { tmp.push_back(data[j++]); } } while (i != mid + 1) { tmp.push_back(data[i++]); } while (j != end + 1) { tmp.push_back(data[j++]); } for (int i = 0; i < tmp.size(); i++) { data[start + i] = tmp[i]; } }
完整代码如下(包含main函数,头文件,测试数组):
#include <iostream>
#include <vector>
using namespace std;
//函数声明
void merge_sort(vector<int> &data, int start, int end);
void merge(vector<int> &data, int start, int mid, int end);
void output_array(vector<int> &data); //输出
void merge_sort(vector<int> &data, int start, int end) { if (start < end) { int mid = (start + end) / 2; merge_sort(data, start, mid); merge_sort(data, mid + 1, end); merge(data, start, mid, end); } } void merge(vector<int> &data, int start, int mid, int end) { vector<int> tmp; int i = start, j = mid + 1; while (i != mid + 1 && j != end + 1) { if (data[i] <= data[j]) { tmp.push_back(data[i++]); } else { tmp.push_back(data[j++]); } } while (i != mid + 1) { tmp.push_back(data[i++]); } while (j != end + 1) { tmp.push_back(data[j++]); } for (int i = 0; i < tmp.size(); i++) { data[start + i] = tmp[i]; } }
void output_array(vector<int> &data) {
for(auto i : data) {
cout << i << " ";
}
cout << endl;
}
int main() {
int _data[] = {2, 4, 6, 0, 9, 8};
vector<int> data(_data, _data + 6);
merge_sort(data, 0, (int)data.size() - 1);
output_array(data);
return 0;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性