題目如下:
對結構體數組進行排序。
“題目描述:
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
基本的算法沒有那么難,相信自己可以解決!