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

服装b2c商城网站建设seo信息查询

服装b2c商城网站建设,seo信息查询,wordpress教程网页修改,wordpress后台慢插件一、堆排序算法 基本思想 堆排序是一种比较有效的排序方法,其基本思想是: 构建最大堆:首先将待排序的数组构建成一个最大堆,即对于每个非叶子节点,它的值都大于或等于其子节点的值。排序:然后将堆顶元素…

一、堆排序算法

基本思想

堆排序是一种比较有效的排序方法,其基本思想是:

  1. 构建最大堆:首先将待排序的数组构建成一个最大堆,即对于每个非叶子节点,它的值都大于或等于其子节点的值。
  2. 排序:然后将堆顶元素(最大值)与堆的最后一个元素交换位置,将其移出堆,并调整剩余元素以保持最大堆的性质。
步骤
  1. 构建最大堆:从最后一个非叶子节点开始,逐个调整子树,使之满足最大堆的条件。
  2. 排序:重复以下操作直到堆为空:
    • 将堆顶元素(最大值)与堆的最后一个元素交换位置。
    • 重新调整剩余元素以保持最大堆的性质。
示例

假设我们有一个数组 [5, 2, 4, 6, 1, 3]

  1. 构建最大堆
    • [5, 2, 4, 6, 1, 3] -> [6, 5, 4, 2, 1, 3]
  2. 排序
    • 将最大的元素 6 移动到数组的末尾,然后重新调整剩余元素以保持最大堆的性质。
    • 重复此过程,直到所有元素都被排序。
性能分析
  • 时间复杂度:O(n log n),其中 n 是数组中的元素数量。
  • 空间复杂度:O(1)(原地排序)。

二、代码

#include <stdlib.h>
#include <stdio.h>
#include <time.h>// 函数声明
int* create_and_generate_random_array(int size);
void print_array(int *array, int size);
void heapify(int *array, int n, int i);
void heap_sort(int *array, int size);
int generate_random_size();int main() {int size = generate_random_size(); // 随机生成数组大小int *array = create_and_generate_random_array(size);if (array == NULL) {// 如果内存分配失败printf("Memory allocation failed\n");free(array);return 1;}// 打印原始数组(如果需要,可以取消注释)// printf("Original array:\n");// print_array(array, size);// 获取开始时间clock_t start_time = clock();// 对数组进行堆排序heap_sort(array, size);// 获取结束时间clock_t end_time = clock();// 计算时间差并转换为毫秒double execution_time = ((double)(end_time - start_time) / CLOCKS_PER_SEC) * 1000;// 打印排序后的数组(如果需要,可以取消注释)// printf("Sorted array:\n");// print_array(array, size);printf("array_size = %d\n", size);// 打印执行时间printf("Execution time: %.2f ms\n", execution_time);// 释放分配的内存free(array);return 0;
}// 生成随机数组大小
int generate_random_size() {srand(time(NULL));return rand() % 9000 + 1000; // 生成1000到9999之间的随机数
}// 创建并生成随机数组
int* create_and_generate_random_array(int size) {int *array = (int *)malloc(sizeof(int) * size);if (array == NULL) {// 如果内存分配失败return NULL;}// 使用当前时间作为随机数种子srand(time(NULL));for (int i = 0; i < size; i++) {array[i] = rand() % 1000; // 生成0到999之间的随机数}return array;
}// 打印数组
void print_array(int *array, int size) {for (int i = 0; i < size; i++) {printf("%d ", array[i]);}printf("\n");
}// 构建最大堆
void heapify(int *array, int n, int i) {int largest = i; // 初始化最大值索引int left = 2 * i + 1; // 左子节点int right = 2 * i + 2; // 右子节点// 如果左子节点大于根if (left < n && array[left] > array[largest])largest = left;// 如果右子节点大于当前最大值if (right < n && array[right] > array[largest])largest = right;// 如果最大值不是根if (largest != i) {int swap = array[i];array[i] = array[largest];array[largest] = swap;// 递归地堆化受影响的子树heapify(array, n, largest);}
}// 堆排序
void heap_sort(int *array, int size) {// 构建最大堆for (int i = size / 2 - 1; i >= 0; i--)heapify(array, size, i);// 一个接一个从堆顶取出元素for (int i = size - 1; i > 0; i--) {// 将当前根(最大值)移动到数组末尾int temp = array[0];array[0] = array[i];array[i] = temp;// 调整剩余堆,使其成为最大堆heapify(array, i, 0);}
}

http://www.tj-hxxt.cn/news/81041.html

相关文章:

  • 网页设计用到的技术阳江seo
  • 怎么做网站的悬浮客服优化seo方案
  • 东莞网站建设网站建设多少钱软件培训班
  • 深圳自己的网站建设网络营销的主要传播渠道
  • 网络绿化网站建设哪家权威网站建设与管理是干什么的
  • 网站建设用什么代码最近的新闻热点
  • 有哪些做ae小动效的网站什么是seo文章
  • 广州网站建设易得搜索引擎优化关键词的处理
  • 绥化建设局网站网站链接提交
  • wordpress日历插件下载seo课程培训要多少钱
  • 营销型网站策划设计百度识图 上传图片
  • 商丘网站建设专业现状最全bt磁力搜索引擎索引
  • 百度建设网站金华百度推广公司
  • 匈牙利网站后缀产品推广软件有哪些
  • 网站开发 业务流程图找平台推广
  • 比较好的网站建设技术开发凡客建站
  • 外包网接单seo整合营销
  • wordpress网站搬家换域名怎么制作网页
  • 河南建设信息网站广州百度推广开户
  • 做电商网站的流程百度的营销推广
  • 九江 网站建设seo日常优化内容是什么
  • 有什么网站可以做外贸出口信息百度站长工具如何使用
  • 做led开关电源上什么网站好windows优化大师兑换码
  • 皖icp网站建设武汉网优化seo公司
  • 七七影视大全在线看免费真人seo点击平台
  • 上海网站建设公司网站建设yahoo搜索引擎
  • 东莞网站建设全过程app营销
  • 网站被清空了怎么办域名是什么意思呢
  • 软件ui设计公司优化电脑的软件有哪些
  • 河南省住房城乡建设厅官网站内seo内容优化包括