归并排序

来源:互联网 发布:万德数据库 编辑:程序博客网 时间:2024/06/06 05:32

归并排序,从字面来看,归并归并——递归和合并的结合体。

为什么这样说,这种排序方式通过二分的思想和递归的思想来排序。将一组数分为两部分,将两部分分别进行排序。排序后再进行合并。而每一部分的排序都可以看做一个新数列来排序,同样通过上述思想...这样不断的二分直到只剩下1个数字的数组,这时开始排序。

void MERGESORT(int A[1000], int p, int r){int q;if (p < r){q = (p + r) / 2;MERGESORT(A, p, q);MERGESORT(A, q + 1, r);MERGE(A, p, q, r);}}
上面是MERGESORT函数的意义是拆分数组,将其拆分成两个部分。MERGE函数则是由于两个数组的的合并排序,如下
void MERGE(int A[1000], int p, int q, int r){int n1, n2;int i, j;int l[500], E[500];n1 = q - p + 1;n2 = r - q;for (i = 1; i <= n1; i++){l[i] = A[p+i-1];}for (i = 1; i <= n2; i++){E[i] = A[q + i];}l[n1 + 1] = INT_MAX;E[n2 + 1] = INT_MAX;i = 1; j = 1;for (int k = p; k <= r; k++){if (l[i] <= E[j]){A[k] = l[i];i = i + 1;}else{A[k] = E[j];j = j + 1;}}}
这两部分代码就是归并排序的主要内容,可以根据不同的需求对之进行修改。

1 0
原创粉丝点击