#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: 1327384949657697 Press any key to continue