#include <stdio.h>
int main(){
int n; // 数字个数
printf("number count: ");
scanf("%d", &n);
int *p = (int *)malloc(n*sizeof(int)); // 分配数组空间
for(int i=0;i<n;i++){ // 挨个输入数字
printf("number %d: ", i+1);
scanf("%d", p+i);
}
for(int i=0;i<n;i++) // 输出排序前数组
printf("%d ", p[i]);
printf("\n");
for(int i=0;i<n-1;i++){ // 选择排序
int min = i;
for(int j=i+1;j<n;j++) // 找到最小的
if(p[j]<p[min])
min = j;
int tmp = p[i]; // 交换
p[i] = p[min];
p[min] = tmp;
for(int i=0;i<n;i++) // 输出排序的步骤
printf("%d ", p[i]);
printf("\n");
}
return 0;
}
输入输出:
number count: 5↙
number 1: 6↙
number 2: 12↙
number 3: 5↙
number 4: 97↙
number 5: 1↙
6 12 5 97 1
1 12 5 97 6
1 5 12 97 6
1 5 6 97 12
1 5 6 12 97
追问再加上平均值,最大值最小值呢?
追答#include <stdio.h>
int main(){
int n; // 数字个数
printf("number count: ");
scanf("%d", &n);
int *p = (int *)malloc(n*sizeof(int)); // 分配数组空间
for(int i=0;i<n;i++){ // 挨个输入数字
printf("number %d: ", i+1);
scanf("%d", p+i);
}
for(int i=0;i<n;i++) // 输出排序前数组
printf("%d ", p[i]);
printf("\n");
for(int i=0;i<n-1;i++){ // 选择排序
int min = i;
for(int j=i+1;j<n;j++) // 找到最小的
if(p[j]<p[min])
min = j;
int tmp = p[i]; // 交换
p[i] = p[min];
p[min] = tmp;
for(int i=0;i<n;i++) // 输出排序的步骤
printf("%d ", p[i]);
printf("\n");
}
int sum = 0;
for(int i=0;i<n;i++) // 求和
sum += p[i];
printf("\naverage: %f\n", (float)sum/n);
printf("max: %d\n", p[n-1]);
printf("min: %d", p[0]);
return 0;
}
追问非常谢谢!!!