将大话数据结构的归并排序默写实现,注意函数参数的前后顺序,将哪个表的数据归并到哪个表,别弄反了。
#include<iostream>
using namespace std;void MSort(int SR[], int TR1[], int s, int t);
void Merge(int SR[], int TR1[], int i, int m, int n);
#define MAXSIZE 10
typedef struct { //定义顺序表的结构体int r[MAXSIZE+1];
int length;
}SqList;
void MergeSort(SqList *L) { //排序和归并函数,递归实现
MSort(L->r, L->r,1,L->length);
}
void MSort(int SR[],int TR1[],int s,int t) {//拆分、排序
int TR2[MAXSIZE+1];
int m;
if (s == t)
TR1[s] = SR[s];
else
{
m = (s + t) / 2;//将顺序表的数据分为前后两部分
MSort(SR,TR2,s,m);//递归,将前半部分继续拆分、排序,直到分为两两或单个数据
MSort(SR,TR2, m+1, t);//递归,将后半部分继续拆分、排序,直到分为两两或单个数据
Merge(TR2,TR1,s,m,t);//将层层归并后的两部分进行归并
}
}
int j, k,l;
for (k = i, j = m + 1; i <= m&&j <= n; k++) {
if (SR[i] < SR[j])
TR[k] = SR[i++];
else
TR[k] = SR[j++];
}
if (i <= m)
{
for (l = 0; l <= m - i; l++)
TR[k + l] = SR[i+l];
}
if (j <= n)
{
for (l = 0; l <= n - j; l++)
TR[k + l] = SR[j + l];
}
}
int main() {
int A[10]= { 0,50,10,30,90,70,40,80,60,20 };
SqList *L= new SqList;
L->length = 9;
for (int i = 0; i <= L->length; i++)
{
L->r[i] = A[i];
cout << L->r[i] << endl;
}
cout << "************" << endl;
MergeSort(L);
for (int i = 0; i <= L->length; i++)
{
cout << L->r[i] << endl;
}
delete L;
}