头文件:
#define MAXSIZE 20
#define EQ(a, b) ((a) == (b))
#define LT(a, b) ((a) < (b))
#define LQ(a, b) ((a) <= (b))
typedef int KeyType;
typedef int InfoType;

typedef struct ...{
KeyType key;
InfoType otherinfo;
}RedType;

typedef struct ...{
RedType r[MAXSIZE + 1];
int length;
}SqList;源文件:
#include "sort.h"
#include "stdio.h"

void init(SqList &s, int w[], int n)...{
s.length = n;
for(int i = 1; i <= n; i++)...{
s.r[i].key = w[i - 1];
}
}

void show(SqList s)...{
for(int i = 1; i <= s.length; i++)...{
printf("%d ", s.r[i]);
}
printf(" ");
}
//merge the sr[i...m] and sr[m+1...n] to tr[i...n].
void merge(RedType sr[], RedType tr[], int i, int m, int n)...{
int j, k;

for(j = m + 1, k = i; i <= m && j <= n; k++)...{
if(LQ(sr[i].key, sr[j].key))...{
tr[k] = sr[i++];
}else...{
tr[k] = sr[j++];
}
}
//copy the left of sr[i...m]
if(i <= m)...{
for(int t = 0; t <= m - i; t++)...{
tr[k + t] = sr[i + t];
}
}
//copy the left of sr[m+1...n]
if(j <= n)...{
for(int t = 0; t <= n - j; t++)...{
tr[k + t] = sr[j + t];
}
}
}
//merge sort sr and store in tr.
void mSort(RedType sr[], RedType tr[], int s, int t)...{
if(s == t)...{
tr[s] = sr[s];
}else...{
int m = (s + t)/2;
RedType tr2[MAXSIZE+1];
mSort(sr, tr2, s, m);
mSort(sr, tr2, m + 1, t);
merge(tr2, tr, s, m, t);
}
}

void mergeSort(SqList &s)...{
mSort(s.r, s.r, 1, s.length);
}

void main()...{
int w[] = ...{49, 38, 65, 97, 76, 13, 27, 49};
int n = 8;
SqList s;
init(s, w, n);
mergeSort(s);
printf("after merge sort: ");
show(s);
}程序运行结果:
after merge sort:
13 27 38 49 49 65 76 97
Press any key to continue说明:
算法的复杂度为O(n * log(n)),是一种稳定的排序方法。
898

被折叠的 条评论
为什么被折叠?



