如何用C语言编一个归并排序的程序

2024-12-29 14:21:53
推荐回答(1个)
回答1:

#include "MergeSort.h"
#include
using namespace std;

MergeSort::MergeSort(vector _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;
}

//9 归并排序:递归-----------------------------------------------------------
//具体方法:以merger_link[]提供链表功能。merger_link[i]对应在有序子序列中
//merger_list[i]后一个结点在原merger_list[]中的下标;
//merger_link[0]总是表示有序子序列开始的结点在merge_list[]中的下标;
//st1,st2为两个有序序列的第一个结点;
//将他们归并,并返回其第一个结点的下标,即merger_link[0]

int MergeSort::list_merge(int st1, int st2)
{
int k = 0, i = st1, j = st2;
while (i && j) //当两序列未检测完
if (list[i] <= list[j]) //将merge_list[i]和merge_list[j]
{ //中小的连接到merger_link[k]后
link[k] = i;
k = i;
i = link[i];
}else
{
link[k] = j;
k = j;
j = link[j];
}
if (!i) link[k] = j; //将剩余未检测完的merge_list[]
else link[k] = i; //连接到merger_link[k]后
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%18 == 0) cout < }
cout <}