要求:1.用数组存储要排序的数,找到最大的数后,排到最后
2.递归调用实现所有排序
开始写了源程序如下:
#include
void selection_sort(int n, int a[n])
{
int i, max = 0, tmp = 0;
if(n == 0) return;
/********find the maxmum*******/
for(i = 0; i < n; i++){
if(a[max] <= a[i])
max = i;
}
/***********exchange the maxmum to the end************/
tmp = a[max];
a[max] = a[n];
a[n] = tmp;
selection_sort((n - 1), a);
}
void print_array(int n, int a[n])//print array
{
int i;
for(i = 0; i
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
int a[4] = {2, 3, 1, 4};
selection_sort(4, a);
print_array(4, a);
return 0;
}
编译运行发现,程序崩溃了...开始以为是自己逻辑实现有缺陷,查看了半天,也没看出来啥问题..
..后来没办法,用gdb进行调试,发现程序运行到最后了,突然就冒出来这句:....被搞的有点莫名其妙,看不出问题,郁闷了好久,只好又耐着性子一行一行的查参数的值,后来发现a[max]的值在函数调用的过程中突然变了一串奇怪的数字(明显没初始化过的),再返回看源码,发现是自己粗心,把a[max]和a[n]交换时a[n]的下标写错了(数组下标使用该从0开始!)
..于是改成n-1,问题解决。粗心害死人呐!
ps:gdb调试的时候,最后出的这个信息也起了误导作用,为什么会在main函数执行到最后才出来这个崩溃的信息还不清楚...为什么不在函数调用的时候崩溃?gdb还用的不熟悉,原理不详- -,各位大大知道的指点一二吧~~
阅读(2123) | 评论(1) | 转发(0) |