[分享] 氣泡排序法遞迴寫法不使用for

看板C_and_CPP作者 (Ayuang)時間7年前 (2017/05/24 01:32), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
最近小弟上到計算機課,剛好學到氣泡排列法;同學就問我氣泡排列可以用遞迴寫嗎? 我說應該可以,同學還跟我說不能用到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 : -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.251.134 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1495560722.A.616.html

05/24 10:24, , 1F
tail recursion
05/24 10:24, 1F
文章代碼(AID): #1P978IOM (C_and_CPP)