当前位置: 首页 > news >正文

c语言数据结构--------选择排序

#include <stdio.h>void swap(int *a, int *b);void HeadAdjust(int A[], int k, int n);void HeadAdjustMin(int A[], int k, int n);//简单选择排序
void SelectSort(int A[], int n) {for (int i = 0; i < n - 1; ++i) {int min = i;for (int j = i + 1; j < n; j++) {if (A[min] > A[j])min = j;}swap(&A[min], &A[i]);}
}//堆排序
//建立大根堆
void BuildMaxHeap(int A[], int len) {for (int i = len / 2; i > 0; i--) {HeadAdjust(A, i, len);}}//将以k为根的子树调整为大根堆
void HeadAdjust(int A[], int k, int n) {A[0] = A[k];for (int i = 2 * k; i <= n; i = i * 2) {//判断k有没有右孩子if (i < n && A[i] < A[i + 1])i++;if (A[0] >= A[i]) break;else {A[k] = A[i];k = i;}}A[k] = A[0];}void HeapSort(int A[], int len) {BuildMaxHeap(A, len);for (int i = len; i > 1; i--) {swap(&A[i], &A[1]);HeadAdjust(A, 1, i - 1);}
}//建立小根堆
void BuildMinHeap(int A[], int len) {for (int i = len / 2; i > 0; --i) {HeadAdjustMin(A, i, len);}
}//将以k为根的子树调整为小根堆
void HeadAdjustMin(int A[], int k, int n) {A[0] = A[k];for (int i = 2 * k; i <= n; i = i * 2) {if (i < n && A[i] > A[i + 1]) i++;if (A[0] <= A[i]) break;else {A[k] = A[i];k = i;}}A[k] = A[0];
}void HeapSortMin(int A[], int len) {BuildMinHeap(A, len);for (int i = len; i > 1; i--) {swap(&A[i], &A[1]);HeadAdjustMin(A, 1, i - 1);}
}void swap(int *a, int *b) {int t = *a;*a = *b;*b = t;
}int main(void) {printf("简单选择排序:");int A[] = {49, 38, 65, 97, 76, 13, 27, 49};SelectSort(A, 8);for (int i = 0; i < sizeof(A) / sizeof(A[0]); ++i) {printf("%d  ", A[i]);}printf("\n");printf("堆排序(大根堆)");int B[] = {0, 49, 38, 65, 97, 76, 13, 27, 49};HeapSort(B, 8);for (int i = 1; i < sizeof(B) / sizeof(B[0]); ++i) {printf("%d  ", B[i]);}printf("\n");printf("堆排序(小根堆)");int C[] = {0, 49, 38, 65, 97, 76, 13, 27, 49};HeapSortMin(C, 8);for (int i = 1; i < sizeof(C) / sizeof(C[0]); ++i) {printf("%d  ", C[i]);}return 0;
}

相关文章:

  • 《Operating System Concepts》阅读笔记:p764-p766
  • docker容器,mysql的日志文件怎么清理
  • Spark–steaming
  • 根据极点-零点分布进行状态空间模型降阶
  • 设备制造行业如何避免项目管理混乱?
  • 30分钟编写十大排序算法完成
  • NumPy入门:从数组基础到数学运算
  • Redis ⑤-单线程模型 | 常用数据结构
  • 【SAP-CO】成本主数据
  • UWB定位技术在钢铁厂行业中的创新应用与价值实践
  • 代理设计模式:从底层原理到源代码 详解
  • 物理机检查磁盘坏道方式
  • prtobuf的原理
  • 【Luogu】动态规划一
  • TS-300B浊度传感器详解(STM32)
  • STM32单片机入门学习——第46节: [14-1] WDG看门狗
  • Redis在.NET平台中的各种应用场景
  • AI日报 - 2025年4月23日
  • 代理模式(Proxy Pattern)详解:以延迟加载图片为例
  • NLP高频面试题(五十)——大模型(LLMs)分词(Tokenizer)详解
  • 锚定“水库不垮坝”目标,水利部部署今年水库安全度汛工作
  • 陕西一批干部任职公示:西安市未央、雁塔、阎良区委书记拟调整
  • 宇树的任务已经完成?王兴兴也在等待行业拐点
  • 关税战推高成本,美澳“奥库斯”核潜艇协议或将生变
  • 针对“二选一”,美团再次辟谣
  • 中越海警开展2025年第一次北部湾联合巡逻