现在有很多长方形,每一个长方形都有一个名字,还知道每个长方形的长和宽,长、宽都是整数;现在要求按照长方形名字排序(默认排序规则是字典序升序A-Z); 输入 第一行有一个整数 0<m<20,表示有m个长方形; 接下来的m行,每一行有三个值 ,第一个是字符串表示长方形的名字(长度不超过20),第二个和第三个是整数表示长和宽;c语言
时间: 2024-02-15 13:04:19 浏览: 71
好的,下面是对应的C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
char name[21];
int length;
int width;
} Rectangle;
void swap(Rectangle *a, Rectangle *b) {
Rectangle temp = *a;
*a = *b;
*b = temp;
}
int partition(Rectangle rectangles[], int left, int right) {
Rectangle pivot = rectangles[left];
int i = left + 1;
int j = right;
while (1) {
while (strcmp(rectangles[i].name, pivot.name) < 0 && i < right) {
i++;
}
while (strcmp(rectangles[j].name, pivot.name) > 0 && j > left) {
j--;
}
if (i >= j) {
break;
}
swap(&rectangles[i], &rectangles[j]);
i++;
j--;
}
swap(&rectangles[left], &rectangles[j]);
return j;
}
void quick_sort(Rectangle rectangles[], int left, int right) {
if (left >= right) {
return;
}
int pivot_index = partition(rectangles, left, right);
quick_sort(rectangles, left, pivot_index - 1);
quick_sort(rectangles, pivot_index + 1, right);
}
int main() {
int m;
scanf("%d", &m);
Rectangle rectangles[m];
for (int i = 0; i < m; i++) {
scanf("%s %d %d", rectangles[i].name, &rectangles[i].length, &rectangles[i].width);
}
quick_sort(rectangles, 0, m - 1);
for (int i = 0; i < m; i++) {
printf("%s %d %d\n", rectangles[i].name, rectangles[i].length, rectangles[i].width);
}
return 0;
}
```
上面的代码中,我们使用了快速排序算法来实现按长方形名字排序,比较字符串大小时使用了 `strcmp` 函数,`swap` 函数用于交换两个长方形的位置。在主函数中,我们先读入长方形信息,然后对长方形数组进行快速排序,最后按照长方形名字输出排序后的结果。
阅读全文