标签:10 批量 23 ++ int score printf 数据处理 排序
//采用冒泡法对选秀节目中10位评委所给出的分数排序。
冒泡法:从首元素开始两两比较,score[j] 和 score[j + 1],若score[j] > score[j + 1],
则score[j] 与 score[j + 1]进行交换,完成交换需要一个中间参数n,
n = score[j]; //把原score[j]的值赋给中间参数n
score[j] = score[j + 1]; //把score[j+1]的值赋给score[j]
score[j + 1] = n; //把中间参数n中的原score[j]赋给score[j+1]
过程:经过第一轮的两两比较,score[10]数组中的最大值就被交换到了最后一个元素score[9]中;
因为第一轮的比较已经排出最大数,所以第二轮两两比较只需比较除score[9]的元素,即[0]~[8];
第三轮则两两比较[0]~[7],以此类推。N个元素需要N-1轮排序。
#include<stdio.h>
int main()
{
int i = 0;
double score[10];
printf("请输入10位评委的分数:");
while (i < 10)
{
scanf_s("%lf", &score[i]);
i++;
}
int j = 0, k = 0;
double n = 0; //定义一个n作为中间参数
for (i = 0; i < 9; i++) //第一层循环,控制轮数
{
for (j=0;j<9-i;j++) //第二层循环,控制元素两两比较次数
{
if (score[j] > score[j + 1])
{
n = score[j]; //把原score[j]的值赋给中间参数n
score[j] = score[j + 1]; //把score[j+1]的值赋给score[j]
score[j + 1] = n; //把中间参数n中的原score[j]赋给score[j+1]
}
}
}
for (k = 0; k < 10; k++) //输出排序好的数组元素
{
printf("%7.2lf", score[k]);
}
return 0;
}
ps:上面的程序是抄了题目没看书前自己写的,因为题目只说了给分数排序,所以自己写的没有
每轮排序情况的输出显示。而且在for循环嵌套的第二层循环,控制元素两两比较次数上,循环控制条件写成了j<9,当时的想法是,大循环第一轮比较,小循环需要比较9次,然后想当然的认为大循环第二轮比较,小循环也需要比较9次,虽然也能实现,但上一轮排好的最大数在每轮循环又排了一次,那算法的时间复杂度就增加了。记录该思路错误。把书本的程序也敲下来,如下:
#include<stdio.h>
#define N 10
int main()
{
int i, j, k;
double t, a[N];
printf("请输入%d个评委所给出的分数:\n", N);
for (i = 0; i < N; i++) //输入待排序的N个数
scanf_s("%lf", &a[i]);
for (i = 0; i < N - 1; i++) //N个数需要N-1轮排序
{
for (j = 0; j < N - 1 - i; j++) //每轮排序的两两比较
{
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
printf("\n第%d轮排序后的情况为:\n", i + 1);
for (k = 0; k < N; k++) //输出每轮排序后的情况
{
printf("%7.2lf,", a[k]);
}
}
printf("\n数组冒泡最终结果为:\n");
for (i = 0; i < N; i++)
printf("%7.2lf", a[i]);
return 0;
}
标签:10,批量,23,++,int,score,printf,数据处理,排序 来源: https://blog.csdn.net/zgc_1026999/article/details/122684809
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。