内部排序
外部排序
c
int B[100]={0};
// 归并操作
void Merge(int A[], int low, int mid, int high){
int i = low;
int j= mid+1;
int k;
// 把子序列所有元素复制到B数组
for (k = low; k <= high ; ++k) {
B[k] = A[k];
}
for (k = low; i<=mid && j<=high ; k++) {
// 两个子序列相互比较,当一个序列的元素被安置完后
// 另一个序列的剩余元素肯定是大于且有序的,直接顺序插入
if(B[i] < B[j]){
A[k] = B[i++];
}else{
A[k] = B[j++];
}
}
// 如果一个表没有检测完,复制
while (i <= mid){
A[k++] = B[i++];
}
// 同理
while (j <= high){
A[k++] = B[j++];
}
// 注:只有一个while会执行
}
// 归并排序
void MergeSort(int A[], int low, int high){
// 划分子序列,分到每个子序列长度为1
if(low < high){
int mid = (low+high) / 2;
MergeSort(A, low, mid);
MergeSort(A, mid+1, high);
Merge(A, low, mid, high);
}
}
int main() {
int a[] = {0, 3, 4,6,8,5,7,9,2,1};
int len = sizeof(a) / sizeof(a[0]);
MergeSort(a, 0, len);
for (int i = 0; i < len; ++i) {
printf("%d\n", a[i]);
}
return 0;
}
执行结果
