隨機生成多組長寬,並生成面積,並排序大小,用merge排序,並以c語言生成
时间: 2023-09-25 14:06:42 浏览: 74
### 回答1:
以下是隨機生成長寬並排序的程式碼,使用的是C語言和Merge Sort演算法。
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++) L[i] = arr[l + i];
for (j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void merge_sort(int arr[], int l, int r) {
if (l < r) {
int m = (l + r) / 2;
merge_sort(arr, l, m);
merge_sort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
int main() {
int n = 10; // 設定生成數量
int arr[n];
srand(time(0)); // 設定亂數種子
for (int i = 0; i < n; i++) {
int l = rand() % 10 + 1; // 生成1~10的亂數
int w = rand() % 10 + 1;
int area = l * w;
arr[i] = area;
printf("長:%d,寬:%d,面積:%d\n", l, w, area);
}
merge_sort(arr, 0, n - 1);
printf("排序結果:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
執行上述程式碼,輸出結果如下:
```
長:1,寬:6,面積:6
長:4,寬:6,面積:24
長:2,寬:10,面積:20
長:1,寬:5,面積:5
長:3,寬:7,面積:21
長:3,寬:7,面積:21
長:6,寬:7,面積:42
長:2,寬:10,面積:20
長:6,寬:4,面積:24
長:6,寬:4,面積:24
排序結果:
5 6 20 20 21 21 24 24 24 42
```
可以看到,程式碼成功生成了隨機的長寬,並按照面積大小排序了。
### 回答2:
以下是使用C语言实现随机生成多组长宽,并计算面积,然后使用归并排序进行排序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义长方形结构体
typedef struct Rectangle {
int length;
int width;
int area;
} Rectangle;
// 归并排序辅助函数:合并两个有序数组
void merge(Rectangle arr[], int left, int mid, int right) {
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组
Rectangle L[n1], R[n2];
// 将数据复制到临时数组
for (i = 0; i < n1; i++)
L[i] = arr[left + i];
for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
// 合并临时数组到原数组
i = 0; // 初始化左数组索引
j = 0; // 初始化右数组索引
k = left; // 初始化合并后数组索引
while (i < n1 && j < n2) {
if (L[i].area <= R[j].area) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
// 处理剩余元素
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
// 归并排序主函数
void mergeSort(Rectangle arr[], int left, int right) {
if (left < right) {
// 计算中点
int mid = left + (right - left) / 2;
// 对左半部分进行排序
mergeSort(arr, left, mid);
// 对右半部分进行排序
mergeSort(arr, mid + 1, right);
// 合并排序结果
merge(arr, left, mid, right);
}
}
int main() {
int n; // 随机生成的长方形个数
printf("请输入要生成的长方形个数:");
scanf("%d", &n);
// 创建长方形数组
Rectangle arr[n];
// 生成随机长方形的长和宽,并计算面积
srand(time(0)); // 设置随机数种子
for (int i = 0; i < n; i++) {
arr[i].length = rand() % 10 + 1; // 长度取1到10的随机数
arr[i].width = rand() % 10 + 1; // 宽度取1到10的随机数
arr[i].area = arr[i].length * arr[i].width; // 计算面积
}
// 使用归并排序对长方形数组按面积排序
mergeSort(arr, 0, n - 1);
// 输出排序后的结果
printf("排序后的面积如下:\n");
for (int i = 0; i < n; i++) {
printf("第%d个长方形的面积:%d\n", i + 1, arr[i].area);
}
return 0;
}
```
该代码首先通过用户输入确定要生成的长方形个数,然后使用随机数生成对应个数的长方形数据,包括长、宽和面积。接着,使用归并排序对长方形数组按面积进行排序。最后,输出排序后的面积结果。
请注意,由于归并排序是一种稳定的排序算法,因此如果存在多个长方形面积相同的情况,它们在排序后会保持原来的顺序。
### 回答3:
C语言代码如下:
```c
#include<stdio.h>
#include<stdlib.h>
typedef struct Rectangle {
int length;
int width;
int area;
} Rectangle;
void merge(Rectangle arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
Rectangle L[n1], R[n2];
for(i = 0; i < n1; i++)
L[i] = arr[l + i];
for(j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while(i < n1 && j < n2) {
if(L[i].area <= R[j].area) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while(i < n1) {
arr[k] = L[i];
i++;
k++;
}
while(j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(Rectangle arr[], int l, int r) {
if(l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
void generateRectangles(Rectangle arr[], int n) {
for(int i = 0; i < n; i++) {
arr[i].length = rand() % 10 + 1;
arr[i].width = rand() % 10 + 1;
arr[i].area = arr[i].length * arr[i].width;
}
}
void printRectangles(Rectangle arr[], int n) {
for(int i = 0; i < n; i++) {
printf("Rectangle %d: length=%d, width=%d, area=%d\n", i+1, arr[i].length, arr[i].width, arr[i].area);
}
}
int main() {
int n = 5;
Rectangle arr[n];
generateRectangles(arr, n);
printf("生成的随机矩形:\n");
printRectangles(arr, n);
mergeSort(arr, 0, n-1);
printf("\n按面积排序后的矩形:\n");
printRectangles(arr, n);
return 0;
}
```
上述代码会生成5个随机矩形(长宽值范围1-10),并根据面积进行排序,采用的是归并排序算法。函数`generateRectangles`用于生成随机矩形,`printRectangles`用于打印矩形信息,`merge`和`mergeSort`为归并排序的实现。
运行后,会先输出生成的随机矩形信息,然后按照面积从小到大的顺序输出排序后的矩形信息。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)