归并排序实际上也是一种选择排序。 思路相对简单,就不详细的说了 下面是示例代码,
一个很好理解的例子 比如, 14,13, 11, 17,
首先准备一个 空间 s,刚好能存 这四个数。
这四个数
首先让14和13比较, 那么第一趟 变成了 13, 14, 和 11, 17. 这个时候 两个子序列已经有序
那么 然后再让13, 和11 找出个大的出来,
那就是11, 再继续 13, 再继续14, 最后就是17.
于是就有序了 11, 13, 14, 17. 本质就是选择排序。
具体的算法实现例子如下 , 凡事我写的文章的代码 都是在VC下面编译过 可以之间运行结果的代码 ,
都是自己写过验证的。
void merge(int src[], int dst[], int low, int mid, int high)
{
int i = low, j = mid + 1, k = low;
while (i <= mid && j <= high)
{
if (src[i] <= src[j])
{
dst[k] = src[i];
i++;
}
else
{
dst[k] = src[j];
j++;
}
k++;
}
if (i <= mid)
{
for (int n = i; n<= mid; n++)
{
dst[k++] = src[n];
}
}
if (j <= high)
{
for (int n = j; j<= high; j++)
{
dst[k++] = src[n];
}
}
}
void m_sort(int src[], int dst[], int low, int high)
{
int temp[100];
if (low == high)
{
dst[low] = src[low];
}
else
{
int mid = (low + high) / 2;
m_sort(src, temp, low, mid);
m_sort(src, temp, mid + 1, high);
merge(temp, dst, low, mid, high);
}
}
int main()
{
int a[] = {12, 34, 9, 0, -1, 8, 45, 7, 23, 17};
int dst[10];
m_sort(a, dst, 0, 9);
for (int i = 0; i < 10; i++)
{
printf("%d ", dst[i]);
}
return 0;
}