[分享] 气泡排序法递回写法不使用for

楼主: Ayuang (Ayuang)   2017-05-24 01:31:55
最近小弟上到计算机课,刚好学到气泡排列法;同学就问我气泡排列可以用递回写吗?
我说应该可以,同学还跟我说不能用到for循环。经过苦思良久之后终于写出来了!!
写法就是利用两个函式,一个函数递回,然后又进入另一个函数递回。
以下是程式码:
#define N 10
void dotimes(int *,int);
void change(int *,int);
void main()
{
srand(time(NULL));
int arr[N],i;
for(i=0;i<N;i++)
{
arr[i]=rand()%100;
printf("%5d",arr[i]);
}
printf("\n");
dotimes(arr,N-1);
for(i=0;i<N;i++)
{
printf("%5d",arr[i]);
}
printf("\n");
getchar();
}
void dotimes(int *array,int time)
{
if(time>0)
{
dotimes(array,time-1);
change(array,time);
}
}
void change(int *array,int i)
{
int temp;
if(i>0)
{
if(*(array+i-1)>*(array+i))
{
temp=*(array+i-1);
*(array+i-1)=*(array+i);
*(array+i)=temp;
}
change(array,i-1);
}
}
执行结果:(上排是排列前,下排是排列后)
43 72 69 46 11 76 44 66 88 88
11 43 44 46 66 69 72 76 88 88
:
作者: Yshuan (倚絃)   2017-05-24 10:24:00
tail recursion

Links booklink

Contact Us: admin [ a t ] ucptt.com