C++數組排序

 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 }
相關文章
相關標籤/搜索