// 将a[lo ... mid]和a[mid+1 ... hi]归并
void merge(int a, int lo, int mid, int hi)
{
int i = lo;
int j = mid + 1;
for (int k = lo; k <= hi; k++)
aux[k] = a[k];
for (int k = lo; k <= hi; k++)
if (i > mid) // mid左边归并完毕
a[k] = aux[j++];
else if (j > hi) // mid右边归并完毕
a[k] = aux[i++];
else if (aux[j] < aux[i])
a[k] = aux[j++];
else
a[k] = aux[i++];
}
//
void sort(int a[], int lo, int hi)
{
if (hi <= lo)
return;
int mid = lo + (hi - lo)/2;
sort(a, lo, mid);
sort(a, mid + 1, hi);
merge(a, lo, mid, hi);
}
归并排序
最新推荐文章于 2024-03-26 17:18:09 发布