拍卖网站咋做,界面设计器,wordpress的seo优化,网站 目录结构高级数据结构—优先队列
原理#xff1a;参考趣学数据结构
代码#xff1a;
#include stdio.h
#include stdlib.h
int r[] { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第一个元素不存储元素赋值为-1
int length sizeof(r) / size…高级数据结构—优先队列
原理参考趣学数据结构
代码
#include stdio.h
#include stdlib.h
int r[] { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第一个元素不存储元素赋值为-1
int length sizeof(r) / sizeof(int);//待排序的数的个数
void swap(int i, int j) {//交换二个变量的值int temp r[i];r[i] r[j];r[j] temp;
}
void sink(int k, int n, int flag) {//flag0表示最大堆否则最小堆,实现最大小堆,即所有根节点的值大于等于小于等于该根节点下的左右节点int j 0;while (2 * k n) {//从倒数第二层有左孩子的结点开始往上检查是否满足每个子树是否满足最大小堆的条件j 2 * k;if (flag 0) {//最大堆的更新条件if (jnr[j 1]r[j])j;//找到当前根节点下最大的值if (r[k] r[j])swap(k, j);else//该根节点下已经满足最大堆的条件则退出检查break;}else if (flag 1) {//最小堆的更新条件if (j nr[j 1] r[j])j;//找到当前根节点下最小的值if (r[k] r[j])swap(k, j);else//该根节点下已经满足最小堆的条件则退出检查break;}k j;//更新了当前根结点的值则继续向下检查是否满足最大小堆的条件}
}
void pop(int n) {//出队printf(%d , r[1]);r[1] r[n--];sink(1, n, 0);//大顶堆
}
void swim(int k) {//上浮while (k 1 r[k] r[k / 2]) {swap(k, k / 2);k / 2;}
}
void push(int x, int n) {//入队r[n] x;swim(n);
}
void heapSort(int n, int flag) {//最大堆或最小堆排序,flag0表示最大堆排序否则最小堆排序这里的最小堆因为没有开辟新的空间所以是逆序的而最大堆的排序结果是升序的//初始化堆for (int i n / 2; i 0; i--) {sink(i, n, flag);}
}
int main() {heapSort(length - 1, 0);//初始化大顶堆int i 0,nlength-1;while (i 3) {int v;scanf(%d, v);push(v,n);n;i;}printf(出队:\n);while (n 1) {pop(n);n--;}printf(\n);system(pause);return 0;
}测试截图 时间复杂度O(logn)空间复杂度O(1)
如果存在什么问题欢迎批评指正谢谢