1 #include 2 #include 3 #include 4 5 #define SIZE 5 //數組中元素的數量 6 7 void swap(int *p1, int *p2) //交換數組中的兩個元素 8 { 9 int temp = *p1; //創建變數儲存元素p1的指針 10 *... ...
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<windows.h> 4 5 #define SIZE 5 //數組中元素的數量 6 7 void swap(int *p1, int *p2) //交換數組中的兩個元素 8 { 9 int temp = *p1; //創建變數儲存元素p1的指針 10 *p1 = *p2; //將元素p1的指針改為元素p2的指針 11 *p2 = temp; //將元素p2的指針改為之前存儲的元素p1的指針 12 } 13 14 int main() //程式從這裡開始運行 15 { 16 int array[SIZE]; //創建一個數組 17 printf("未排序數組:\n\n"); 18 for (int i = 0; i < SIZE; i++) //遍曆數組中所有元素 19 { 20 array[i] = rand(); //數組中每個元素賦值為一個隨機數 21 printf("%d\n", array[i]); //輸出還未排序的數組中所有元素 22 } 23 printf("\n\n按下任意鍵開始排序"); 24 getchar(); //等待用戶響應 25 system("cls"); //清除所有輸出結果 26 27 int l = -1, u = SIZE - 1; //定義我們需要尋找最值併排序的初始區間[0,SIZE]為全集 28 for (l++; l < u; u--)//遍歷已排序區間[0,l]∪[u,SIZE]的補集(即遍歷未排序區間) 29 {//當l >= u時,區間(l,u)為空集,跳出迴圈 30 int max = 0, min = 0; //創建用於存儲最大值下標和最小值下標的變數 31 for (int i = 0; i <= u; i++) //遍曆數組在未排序區間中的所有元素 32 { 33 min = array[min]>array[i] ? i : min; //尋找數組在未排序區間中最小值的下標 34 max = array[max]<array[i] ? i : max; //尋找數組在未排序區間中最大值的下標 35 } 36 swap(&array[l], &array[min]); //交換數組在未排序區間中的最小值與數組在未排序區間左端點的值 37 swap(&array[u], &array[max]); //交換數組在未排序區間中的最大值與數組在未排序區間右端點的值 38 printf("數組正在排序:\n\n"); 39 for (int i = 0; i < SIZE; i++) 40 { 41 printf("%d\n", array[i]); 42 } 43 system("cls"); //清除所有輸出結果 44 } 45 printf("排序後數組:\n\n"); 46 for (int i = 0; i < SIZE; i++) //遍歷排序完後數組中所有元素 47 { 48 printf("%d\n", array[i]); //輸出排序後的數組中所有元素 49 } 50 getchar(); //等待用戶響應(防止程式自動退出) 51 return 0; 52 }