题目如下:
对结构体数组进行排序。
“题目描述:
struct Person{
int no;
int age;
int height;
}
实现sort方法对结构体数组进行排序。
void sort(Person * array,int n);
保存为sort.cpp.
根据no从小到大排序;如果no相同则根据age排序;如果age相同,则根据height排序。
注意:
遇到异常情况,输出"error";否则不要随意输出,会视为错误。”
Q1:排序
不是很熟悉排序所以又看了一下冒泡排序
代码如下:
#include <stdio.h>
void swap(int *a, int *b);
int main()
{
int array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};
int i, j;
for (i = 0; i < 10; i++)
{
//每一次由底至上地上升
for (j = 9; j > i; j--)
{
if (array[j] < array[j-1])
{
swap(&array[j], &array[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d\n", array[i]);
}
return 0;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
在编译器里操作了一下,总结有以下几点值得关注:
- 会把较小的数(不是最小)也冒泡上去,体现在无论是否交换位置,都会j--,然后再比较,其实array[j-1]始终是较小的那个数,和相邻的数比较。
- 因为已找出了最小和次最小,所以不用和它们比了,体现在j>i
Tip 2
交换函数,注意形参是struct person类型。
Tip 3
有个bug坑了我好久
swap(array+j,array+j-1);
之前写成了
swap(array+j;array+j-1);
就说为什么编译器一直提醒我要在array前面加括号,原来有分号它以为我语句结束了。
Tip 4
要调用的函数要么先声明,要么就把函数体写在前面。
Tip 5
基本的算法没有那么难,相信自己可以解决!