用C语言写出1.编程判断序列:87,78,53,45,65,9,31,17,23是否为大根堆。 2.编程将序列:7,4,9,15,2,6,10建成堆并输出。 3.修改简单计数排序算法,将序列:23,33,32,44,33,33,65,43,31,12进行排序并输出。的代码
时间: 2024-06-16 16:07:46 浏览: 8
1. 判断序列是否为大根堆的C语言代码如下:
```c
#include <stdio.h>
int isMaxHeap(int arr[], int n) {
for (int i = 0; i <= (n - 2) / 2; i++) {
if (arr[i] < arr[2 * i + 1] || (2 * i + 2 < n && arr[i] < arr[2 * i + 2])) {
return 0;
}
}
return 1;
}
int main() {
int arr[] = {87, 78, 53, 45, 65, 9, 31, 17, 23};
int n = sizeof(arr) / sizeof(arr);
if (isMaxHeap(arr, n)) {
printf("该序列是大根堆。\n");
} else {
printf("该序列不是大根堆。\n");
}
return 0;
}
```
相关问题
依次编程完成如下操作: 1.编程判断序列:87,78,53,45,65,9,31,17,23是否为大根堆。 2.编程将序列:7,4,9,15,2,6,10建成堆并输出。 3.修改简单计数排序算法,将序列:23,33,32,44,33,33,65,43,31,12进行排序并输出。
1. 判断序列是否为大根堆的方法是比较每个节点与其子节点的大小关系。对于一个序列来说,如果对于任意的节点i,满足arr[i] >= arr[2i+1]且arr[i] >= arr[2i+2],则该序列为大根堆。
以下是判断给定序列是否为大根堆的代码实现:
```python
def is_max_heap(arr):
n = len(arr)
for i in range(n//2 - 1, -1, -1):
if arr[i] < arr[2*i + 1] or (2*i + 2 < n and arr[i] < arr[2*i + 2]):
return False
return True
# 测试序列是否为大根堆
arr = [87, 78, 53, 45, 65, 9, 31, 17, 23]
if is_max_heap(arr):
print("给定序列是大根堆")
else:
print("给定序列不是大根堆")
```
用C语言编程将序列:7,4,9,15,2,6,10建成堆并输出。
在 C 语言中,可以使用数组来表示堆。堆有两种形式:大根堆和小根堆。对于大根堆,父节点的值大于等于子节点的值;对于小根堆,父节点的值小于等于子节点的值。本题要求将序列 7, 4, 9, 15, 2, 6, 10 建成大根堆并输出,可以按照以下步骤实现:
1. 将序列转化为完全二叉树,从最后一个非叶子节点开始进行堆化操作。
2. 堆化操作包括:比较当前节点与其左右子节点的大小,若当前节点小于其左右子节点中较大的一个,则交换当前节点与其左右子节点中较大的一个;然后对交换后的子节点递归进行堆化操作。
3. 重复步骤2直到整个二叉树成为大根堆。
按照上述步骤,建成的大根堆为:15, 7, 10, 4, 2, 6, 9。以下是 C 语言代码实现:
```
#include <stdio.h>
void heapify(int arr[], int n, int i) {
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < n && arr[l] > arr[largest])
largest = l;
if (r < n && arr[r] > arr[largest])
largest = r;
if (largest != i) {
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapify(arr, n, largest);
}
}
void buildHeap(int arr[], int n) {
int i;
for (i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
}
int main() {
int arr[] = {7, 4, 9, 15, 2, 6, 10};
int n = sizeof(arr) / sizeof(arr);
buildHeap(arr, n);
printf("大根堆:");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)
![](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)