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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM