![](https://img.kancloud.cn/0b/70/0b70513123d298a416e8b862561efd7e_1120x861.png)
![](https://img.kancloud.cn/d4/d1/d4d1a8fc46251c4952c664111a5e2e67_917x625.png)
```
#include <stdio.h>
int count = 0;
void swap(int k[], int i, int j)
{ //交换
int temp;
temp = k[i];
k[i] = k[j];
k[j] = temp;
}
void HeapAdjust(int k[], int s, int n)
{
int i, temp;
temp = k[s];
for( i=2*s; i <= n; i*=2 ) //每次都是跳到左孩子
{
count++;
if(i<n && k[i] < k[i+1])
i++; //找到孩子节点中的大者
if( temp >= k[i] )break; //如果双亲节点大于孩子节点的大者,跳出循环(不用再循环)
k[s] = k[i];
s=i; //交换位置后继续比较
}
k[s] = temp;
}
void HeapSort(int k[], int n)
{
int i;
for( i=n/2; i > 0; i-- )
HeapAdjust(k, i, n); //构造大顶堆
:976435102,然后进行排序
for(i=1;i<10;i++)
printf("%d", k[i]);
printf("\n\n");
for(i=n;i>1;i--)
{
swap(k, 1, i);
HeapAdjust(k, 1, i-1); //调整父节点与其孩子节点进行比较并交换位置和调整
}
}
int main()
{
int i,a[10]={-1,5,2,6,0,3,9,1,7,4};
HeapSort(a, 9);
printf("总共执行 %d 次比较!\n",count);
printf("排序后的结果是: ");
for(i=1;i<10;i++)
printf("%d", a[i]);
printf("\n\n");
return 0;
}
```
- 蓝桥杯
- 问题 1434[蓝桥杯][历届试题]回文数字
- 问题 1084: 用筛法求之N内的素数。 时间限制: 1Sec 内存限制: 64MB
- 问题 1094: 字符串的输入输出处理 时间限制: 1Sec 内存限制: 64MB
- A + B Problem II(1002)
- ACM
- L. Digit sum--The Preliminary Contest for ICPC Asia Shanghai 2019
- 单链表逆置法
- 有线性表(a1,a2,…,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结点。分别写出下面三种情况的查找语句。要求时间尽量少。 (1)线性表中元素无序。(2)线性表中元素按递增有序。 (3)线性表中元素按递减有序。
- 减治法
- 减治法之堆运算
- 减治法之求两序列中位数
- 减治法之求第k小的数字
- 选择问题考研题
- 动态规划
- 动态规划之最长公共子序列
- 最大总和(1003)
- 数塔问题
- 动态规划之最大子段和
- 丢鸡蛋
- 0-1背包问题
- TSP问题
- 贪心算法
- 活动安排