最近小弟上到計算機課,剛好學到氣泡排列法;同學就問我氣泡排列可以用遞迴寫嗎?
我說應該可以,同學還跟我說不能用到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
: