#include<iostream>
using namespace std;
int aux[30];
void merge(int *a, int l, int m, int r)
{
int i,j,k;
for(i = m+1; i > l; i--)
aux[i-1] = a[i-1];
for(j = m; j < r; j++)
aux[r+m-j] = a[j+1];
for(k = l; k <= r; k++)
if( aux[j] < aux[i])
a[k] = aux[j--];
else
a[k] = aux[i++];
}
void show(int *a, int l, int r)
{
int i;
for(i = l; i <= r; i++)
printf("a[%d] is %d \n",i,a[i]);
printf("-------------------\n");
}
void mergesort(int *a, int l, int r)
{
int m = (l+r)/2;
if( r <= l) return ;
mergesort(a, l, m);
mergesort(a, m+1, r);
merge(a, l, m, r);
}
int main()
{ int a[30]; int i;
for(i = 0; i <= 10; i++)
a[i] = rand()%100;
printf("before mergesort:\n");
show(a, 0, 10);
mergesort( a, 0, 10);
printf("after mergesort:\n");
show(a, 0, 10);
return 0;
}
这个算法头疼的费了好长时间,看了书明白是哪些细节出了错。主要是数组的下标在赋值的时候要特别注意。下标什么时候从0开始,而且中间下标m不能重复。
总结:
1、数组下标要注意。
2、代码以后就要这样写,规范。
3、要能熟练地敲出这段代码。