8 1 排序的遞迴函式設計 20分

2021-10-07 11:27:00 字數 1659 閱讀 6596

從語法角度看,遞迴是指函式自己呼叫自己的現象。遞迴還可以看作一種複雜問題的求解策略,對複雜問題只需給出遞迴邊界和遞迴關係,由此構造遞迴函式即可完成求解。本題要求以陣列元素排序問題為例,嘗試用遞迴的思想設計乙個用於由小到大排序的遞迴函式。

具體來說。假設存在乙個10個元素組成的一維整型陣列,主函式中完成陣列的輸入、排序函式的呼叫以及排序結果的輸出。要求同學們基於遞迴的策略自己設計乙個排序函式,實現陣列元素由小到大的排序,給出問題分析的過程、思路描述以及遞迴函式的**。

遞迴函式可參考如下結構設計,第乙個形式引數用來接收陣列名資訊,第二個形式引數代表陣列中待排序區間的左側元素下標,第三個形式引數代表待排序區間的右側元素下標。

void mysort(int a[10], int leftindex, int rightindex) //可參考的排序函式函式頭

主函式:

int

main()

解決思路1:

// 使用非遞迴的思路實現此演算法,遞迴與迴圈 在此處是可以交換使用的

#include

void

mysort

(int a,

int leftindex,

int rightindex)

;int

main()

scanf

("%d %d"

,&left,

&right)

;mysort

(a,left,right)

;for

(int i=

0;i<

10;i++

)printf

("%d "

,a[i]);

return0;

}void

mysort

(int a,

int leftindex,

int rightindex)

// 思路1:插入排序演算法 如果左邊等於右邊那麼就不用排序,否則的話就

a[k+1]

=temp;

}}

解決思路2:

// 使用非遞迴的思路實現此演算法,遞迴與迴圈 在此處是可以交換使用的

#include

void

mysort

(int a,

int leftindex,

int rightindex)

;int

main()

scanf

("%d %d"

,&left,

&right)

;mysort

(a,left,right)

;for

(int i=

0;i<

10;i++

)printf

("%d "

,a[i]);

return0;

}void

mysort

(int a,

int leftindex,

int rightindex)

// 思路2:使用遞迴對其進行排序,遞迴邊界是陣列元素長度為1時此時不需要排序,直接返回即可

else

return

;}

2020.06.24 第一次修改

10 排序4 統計工齡 20 分

給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入格式 輸入首先給出正整數n 10 5 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 輸出格式 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。輸入樣例 810 ...

10 排序4 統計工齡 20 分

給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入首先給出正整數n 10 5 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。8 10 2 0 5 7 2 5 20...

10 排序4 統計工齡 20 分

給定公司n名員工的工齡,要求按工齡增序輸出每個工齡段有多少員工。輸入首先給出正整數n 即員工總人數 隨後給出n個整數,即每個員工的工齡,範圍在 0,50 按工齡的遞增順序輸出每個工齡的員工個數,格式為 工齡 人數 每項佔一行。如果人數為0則不輸出該項。8 10 2 0 5 7 2 5 20 1 2 ...