归并排序算法C++实现
2016-11-02 12:19
218 查看
MergeSort.h
MergeSort.cpp
#include "MergeSort.h"
#include <iostream>
using namespace std;
MergeSort::MergeSort(vector<int> _list, int _len)
{
list.push_back(0);
link.push_back(0);
for (int i=0; i<_len; i++)
{
list.push_back(_list[i]);
link.push_back(0);
}
this->len = _len;
}
int MergeSort::list_merge(int st1, int st2)
{
int k = 0, i = st1, j = st2;
while(i && j)
if (list[i] <= list[j])
{
link[k] = i;
k = i;
i = link[i];
}
else
{
link[k] = j;
k = j;
j = link[j];
}
if (!i) link[k] = j;
else link[k] = i;
return link[0];
}
int MergeSort::merge_sort(int left, int right)
{
if (left >= right) return left;
int middle = (left + right)/2;
return list_merge(merge_sort(left, middle), merge_sort(middle+1, right));
}
void MergeSort::out()
{
int i= link[0];
int j = 0;
while(i)
{
j++;
cout << list[i] << " ";
i = link[i];
if (j%5 == 0) cout << endl;
}
cout << endl;
}
main.cpp
#ifndef MERGESORT_H #define MERGESORT_H #include <vector> using namespace std; class MergeSort { private: int len; vector<int>list; vector<int>link; public: MergeSort(vector<int> _list, int _len); int merge_sort(int,int); int list_merge(int,int); void out(); }; #endif
MergeSort.cpp
#include "MergeSort.h"
#include <iostream>
using namespace std;
MergeSort::MergeSort(vector<int> _list, int _len)
{
list.push_back(0);
link.push_back(0);
for (int i=0; i<_len; i++)
{
list.push_back(_list[i]);
link.push_back(0);
}
this->len = _len;
}
int MergeSort::list_merge(int st1, int st2)
{
int k = 0, i = st1, j = st2;
while(i && j)
if (list[i] <= list[j])
{
link[k] = i;
k = i;
i = link[i];
}
else
{
link[k] = j;
k = j;
j = link[j];
}
if (!i) link[k] = j;
else link[k] = i;
return link[0];
}
int MergeSort::merge_sort(int left, int right)
{
if (left >= right) return left;
int middle = (left + right)/2;
return list_merge(merge_sort(left, middle), merge_sort(middle+1, right));
}
void MergeSort::out()
{
int i= link[0];
int j = 0;
while(i)
{
j++;
cout << list[i] << " ";
i = link[i];
if (j%5 == 0) cout << endl;
}
cout << endl;
}
main.cpp
#include "MergeSort.h" #include <iostream> using namespace std; int main() { vector<int> list; int tmp; cout << "please input num, 9999 end: " << endl; while(cin >> tmp && tmp != 9999) { list.push_back(tmp); } MergeSort mer(list, list.size()); //mer.merge_sort(list.begin(), (list.end()-1)); mer.merge_sort(0, list.size()-1); mer.out(); return 0; }
相关文章推荐
- 归并排序算法C++的实现
- C++实现自底向上的归并排序算法
- C/C++实现如下 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++)
- C++实现自顶向下的归并排序算法
- c++实现的归并排序算法
- C++实现的归并排序算法详解
- C++ 归并排序算法的实现与改进(含笔试面试题)
- 归并排序算法C++实现
- C++ 归并排序算法实现
- Singleton模式的C++实现研究(示例代码)
- 在C++中实现“属性 (Property)”
- C++机理:虚拟机制的实现[兼谈对比于传统机制]
- 用C++ std::priority_queue 实现哈夫曼算法
- 用C++实现C#中的委托/事件(标准C++之升级版)
- 再探C++的单件实现
- 用 C++ 实现 C# 中的 委托/事件 (2-delegate event functor)
- 在C++中实现属性
- 用PHP实现通过Web执行C/C++程序
- 使用c++实现Format函数
- More Effective C++ Item 附2:一个auto_ptr的实现实例