码图结构体排序

题目如下:
对结构体数组进行排序。

“题目描述:
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 
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

基本的算法没有那么难,相信自己可以解决!

你可能感兴趣的:(码图结构体排序)