void Merge(int a[],int b[], int l, int mid, int r){
int i = l, j=mid+1, k = l;
while(i!=mid+1 && j!=r+1) {
if(a[i] > a[j])
b[k++] = a[j++];
else
b[k++] = a[i++];
}
while(i != mid+1)
b[k++] = a[i++];
while(j != r+1)
b[k++] = a[j++];
for(i=l; i<=r; i++)
a[i] = b[i];
}
//内部使用递归
void MergeSort(int a[], int b[], int l, int r) {
int mid;
if(l < r) {
mid = l + (r-l) / 2;//避免溢出int
MergeSort(a, b, l, mid);
MergeSort(a, b, mid+1, r);
Merge(a, b, l, mid, r);
}
}
int main(int argc, char * argv[]) {
int a[8] = {50, 10, 20, 30, 70, 40, 80, 60};
int i, b[8];
MergeSort(a, b, 0, 7);
for(i=0; i<8; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
归并排序oj
最新推荐文章于 2024-07-24 19:35:30 发布