大神求解C语言编程题 冒泡排序和简单选择排序写出来

急急急 谢谢
编程题 第一题

#include <stdio.h>
#include <conio.h>

#define ARR_LEN 255 /*数组长度上限*/

typedef struct stu {
int stuID; /* 学号 */
float score; /* 成绩 */
} stu;

/* 找出成绩最低的学生信息 */
stu * min (stu s[], int n) {
float minScore = s[0].score;
stu *minStu = &s[0];
int i;
for (i=0; i<n; i++) {
if (s[i].score < minScore) {
minScore = s[i].score;
minStu = &s[i];
}
}
return minStu;
}

/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* stu arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (stu arr[], int len) {
stu temp;
int i, j;
for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j].score < arr[j+1].score) { /* 相邻元素比较,若逆序则交换(升序为左大于右,逆序反之) */
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}

/*打印数组*/
/* stu arr[]: 打印目标数组; int len: 元素个数 */
void printArray (stu arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("学号:%d\t成绩:%.2f\n", arr[i].stuID, arr[i].score);
putchar ('\n');
}

int main (void) {
int n;
stu s[ARR_LEN];
stu *minStu;

/* 初始化若干学生信息 */
n = 4;
s[0].stuID = 1001; s[0].score = 98;
s[1].stuID = 1002; s[1].score = 78;
s[2].stuID = 1003; s[2].score = 69;
s[3].stuID = 1004; s[3].score = 81;

minStu = min (s, n);
printf ("成绩最低的学生:\n");
printf ("学号:%d\t成绩:%.2f\n", (*minStu).stuID, (*minStu).score);
putchar ('\n');

printf ("按成绩由高到低排序:\n");
bubbleSort (s, n);
printArray (s, n);

getch (); /*屏幕暂留*/
return 0;
}

追问

多谢 我试一下

温馨提示:答案为网友推荐,仅供参考
相似回答