選擇排序法
老師布置的程序實驗作業:
下面程序為選擇排序,要求按如下步驟完成本題實驗,理解和掌握函數參數的傳遞,理解函數的嵌套調用。
1) 閱讀程序,理解選擇排序的思想
2) 上機編輯,調試程序
3) 用兩組數據,給出程序運行結果,
4) 用單步執行,觀察程序執行的流程
5) 畫出流程圖描述程序的實現
6) 問題:什么是函數的嵌套調用?
原理:
選擇排序,即從亂序輸入的一組數組(個數為n)中,找出其中大(最小)元素所在的位置,把該元素的和最右邊(最左邊)的元素交換位置。接下來,排除已排序元素,在剩下元素中尋找最大(最小元素)。。。重復操作,直到操作了n-1遍后,所有元素都已經排好序,再輸出排序后的數組。
代碼:
#include <iostream> using namespace std; #define N 10 int max(int a[], int n); void sel_sort(int a[], int n); int main() { loop: //使用loop控制流程,方便調試 int a[N]; for (int i = 0; i < N; i++) //一次輸入數組的值 { cin >> a[i]; } //調用函數sel_sort,函數sel_sort中嵌套調用函數max sel_sort(a, N); //a相當與指針,實際上傳遞了數組a[10]的首地址也即是a[0]的地址 for (int i = 0; i < 10; i++) { cout << a[i] << " "; } cout << endl; goto loop; system("pause"); } int max(int a[], int n) { int i, j = 0; for (i = 1; i < n; i++) { if (a[i] > a[j]) { j = i; } } return j; //把j返回給sel_sort函數中max函數的調用點 } void sel_sort(int a[], int n) { int j; //在函數sel_sort中可見 int i = n; for (; i > 1; i--) { j=max(a, i); //調用max函數,把數組和變量i傳輸過去,i用來控制max中選擇最大值的范圍,每選完一個最大值,縮小一次范圍,直到縮小為2 int temp = a[i-1]; //交換當前未排序的最右邊的值與經max函數求出的當前范圍中的最大值 a[i-1] = a[j]; a[j] = temp; } //經過9次選擇排序后,得出從左往右是從小到大排序的數列 return; //函數返回類型為void,此行可省略 }
調試結果:
錯漏百出非常拙劣的程序框圖:

函數嵌套調用:
函數的定義是相互平行的,不可在一個函數定義中定義另一個函數,但函數可以在另一個函數中被調用。函數的嵌套調用就是,在一個函數中,調用其他的函數,通過其他函數的行為或者是調用其他函數的返回值來達到某種目的。

浙公網安備 33010602011771號