欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++数组排序

程序员文章站 2022-06-10 17:41:59
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 }