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

网站建设的市场容量网站免费搭建平台

网站建设的市场容量,网站免费搭建平台,疫情最新数据消息黑龙江,腾讯云服务器用什么软件做网站文章目录 1. 计数排序(Counting Sort)1.1 简介1.2 计数排序的步骤1.3 计数排序C语言实现注释说明: 1.4 时间复杂度1.5 空间复杂度 1. 计数排序(Counting Sort) 1.1 简介 计数排序(Counting Sort&#xff…

文章目录

  • 1. 计数排序(Counting Sort)
    • 1.1 简介
    • 1.2 计数排序的步骤
    • 1.3 计数排序C语言实现
      • 注释说明:
    • 1.4 时间复杂度
    • 1.5 空间复杂度

1. 计数排序(Counting Sort)

1.1 简介

计数排序(Counting Sort)是一种非比较型整数排序算法,适用于一定范围内的整数排序。它的基本思想是通过计数来确定每个元素在排序后数组中的位置,从而实现排序。计数排序的时间复杂度为 O(n + k),其中 n 是待排序数组的元素个数,k 是待排序元素的取值范围。

1.2 计数排序的步骤

计数排序(Counting Sort)是一种非比较型整数排序算法,适用于一定范围内的整数排序。它的基本思想是通过计数来确定每个元素在排序后数组中的位置,从而实现排序。计数排序的时间复杂度为 O(n + k),其中 n 是待排序数组的元素个数,k 是待排序元素的取值范围。

  1. 找出待排序数组中的最大值和最小值,以确定元素的取值范围。
  2. 创建一个计数数组,其大小为最大值与最小值之差加一(因为包含边界值)。
  3. 遍历待排序数组,统计每个元素出现的次数,并将结果存储在计数数组中。
  4. 计算前缀和,以确定每个元素在排序后数组中的位置。
  5. 创建输出数组,根据计数数组中的信息将元素放入正确的位置。

1.3 计数排序C语言实现

#include <stdio.h>
#include <stdlib.h>// 计数排序函数
void CountSort(int* a, int n) {// 初始化最大值和最小值为数组的第一个元素int max = a[0], min = a[0];// 遍历数组,找到最大值和最小值for (int i = 1; i < n; i++) { // 注意这里从1开始,因为第一个元素已经用于初始化if (a[i] > max)max = a[i]; // 更新最大值if (a[i] < min)min = a[i]; // 更新最小值}// 计算计数数组的大小,并动态分配内存int range = max - min + 1;int* count = (int*)malloc(range * sizeof(int));if (count == NULL) {// 内存分配失败处理(这里简单处理为退出程序,实际应用中可能需要更复杂的错误处理)fprintf(stderr, "Memory allocation failed\n");exit(EXIT_FAILURE);}// 初始化计数数组为0for (int i = 0; i < range; i++) {count[i] = 0;}// 统计每个元素出现的次数for (int i = 0; i < n; i++) {count[a[i] - min]++; // 使用元素值减去最小值作为计数数组的下标}// 重建排序后的数组int* output = (int*)malloc(n * sizeof(int));if (output == NULL) {// 内存分配失败处理free(count); // 释放已经分配的内存fprintf(stderr, "Memory allocation failed\n");exit(EXIT_FAILURE);}int index = 0; // 用于填充输出数组的索引for (int i = 0; i < range; i++) {// 对于每个在计数数组中出现的元素,将其填充到输出数组中while (count[i] > 0) {output[index] = i + min;index++;count[i]--;}}// 将排序后的数组复制回原数组for (int i = 0; i < n; i++) {a[i] = output[i];}// 释放动态分配的内存free(count);free(output);
}// 主函数,用于测试计数排序
int main() {int arr[] = {4, 2, 2, 8, 3, 3, 1};int n = sizeof(arr) / sizeof(arr[0]);// 调用计数排序函数CountSort(arr, n);// 打印排序后的数组for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

注释说明:

  1. 初始化最大值和最小值

    • 将数组的第一个元素赋值给最大值 max 和最小值 min
  2. 找到最大值和最小值

    • 遍历数组(从第二个元素开始,因为第一个元素已经用于初始化),更新最大值和最小值。
  3. 动态分配计数数组

    • 根据最大值和最小值计算计数数组的大小(范围),并动态分配内存。
    • 检查内存分配是否成功,如果失败则处理错误(这里简单处理为退出程序)。
    • 初始化计数数组为0。
  4. 统计每个元素出现的次数

    • 遍历输入数组,使用元素值减去最小值作为计数数组的下标,统计每个元素的出现次数。
  5. 重建排序后的数组

    • 动态分配一个大小为 n 的输出数组。
    • 使用两个循环:外循环遍历计数数组,内循环(while 循环)根据计数数组的值将元素填充到输出数组中。
    • 注意,这里我们没有显式地计算前缀和,而是直接在填充输出数组时减少了计数数组的值。
  6. 将排序后的数组复制回原数组

    • 遍历输出数组,将排序后的元素复制回原数组。
  7. 释放内存

    • 释放计数数组和输出数组所占用的内存。
  8. 主函数

    • 初始化一个待排序的数组。
    • 调用计数排序函数。
    • 打印排序后的数组。

计数排序(Counting Sort)的时间复杂度和空间复杂度分析如下:

1.4 时间复杂度

  1. 查找最大值和最小值

    • 需要遍历整个数组一次,因此时间复杂度为 O ( n ) O(n) O(n)
  2. 初始化计数数组并统计元素出现次数

    • 初始化计数数组的时间复杂度为 O ( k ) O(k) O(k),其中 k k k 是计数数组的大小(即输入数组中的最大值与最小值之差加一)。
    • 遍历输入数组并统计元素出现次数的时间复杂度为 O ( n ) O(n) O(n)
  3. 重建排序后的数组

    • 遍历计数数组并根据其值填充输出数组的时间复杂度为 O ( n + k ) O(n + k) O(n+k),但在最坏情况下(即所有元素都相同或非常接近时),这仍然可以看作是 O ( n ) O(n) O(n),因为 k k k 是由输入数据决定的,并且通常远小于 n n n 的数量级时,我们可以忽略 k k k 对时间复杂度的影响(但这取决于具体情况,如果 k k k n n n 相近,则不能忽略)。

综上所述,计数排序的总时间复杂度在 O ( n + k ) O(n + k) O(n+k),其中 n n n 是输入数组的大小, k k k 是输入数据的范围(最大值与最小值之差加一)。在输入数据范围较小的情况下,计数排序是非常高效的。

1.5 空间复杂度

  • 计数数组:需要额外一个大小为 k k k 的数组来存储每个元素的出现次数。
  • 输出数组(如果单独分配):在重建排序后的数组时,如果分配了一个单独的输出数组,则需要额外的 n n n 个空间。但如前所述,这可以通过直接在原数组上重建来避免。

文章转载自:
http://myelocytic.hmxb.cn
http://corequisite.hmxb.cn
http://entireness.hmxb.cn
http://skywriting.hmxb.cn
http://esro.hmxb.cn
http://theirself.hmxb.cn
http://indiscretionary.hmxb.cn
http://soleplate.hmxb.cn
http://cesura.hmxb.cn
http://chloride.hmxb.cn
http://namesake.hmxb.cn
http://enthronization.hmxb.cn
http://captainless.hmxb.cn
http://assess.hmxb.cn
http://microgauss.hmxb.cn
http://granuliform.hmxb.cn
http://pycnocline.hmxb.cn
http://nascence.hmxb.cn
http://zarathustra.hmxb.cn
http://metatarsus.hmxb.cn
http://vapidity.hmxb.cn
http://hollowhearted.hmxb.cn
http://bren.hmxb.cn
http://indelicacy.hmxb.cn
http://io.hmxb.cn
http://outpost.hmxb.cn
http://pinhole.hmxb.cn
http://hydrocolloid.hmxb.cn
http://crus.hmxb.cn
http://usually.hmxb.cn
http://edi.hmxb.cn
http://inculpable.hmxb.cn
http://acacia.hmxb.cn
http://homemaking.hmxb.cn
http://housewares.hmxb.cn
http://salable.hmxb.cn
http://weightlessness.hmxb.cn
http://dopant.hmxb.cn
http://tower.hmxb.cn
http://underscrub.hmxb.cn
http://nill.hmxb.cn
http://cella.hmxb.cn
http://henhouse.hmxb.cn
http://knotless.hmxb.cn
http://asphyxy.hmxb.cn
http://radiocesium.hmxb.cn
http://liberality.hmxb.cn
http://laval.hmxb.cn
http://supposititious.hmxb.cn
http://folksinging.hmxb.cn
http://bald.hmxb.cn
http://lig.hmxb.cn
http://herniation.hmxb.cn
http://composite.hmxb.cn
http://uncial.hmxb.cn
http://gharial.hmxb.cn
http://dahomean.hmxb.cn
http://peplos.hmxb.cn
http://autecologically.hmxb.cn
http://synephrine.hmxb.cn
http://dhobi.hmxb.cn
http://transaxle.hmxb.cn
http://colicinogeny.hmxb.cn
http://collarette.hmxb.cn
http://tartrated.hmxb.cn
http://hovertrain.hmxb.cn
http://nymphalid.hmxb.cn
http://monkly.hmxb.cn
http://opacimeter.hmxb.cn
http://whatman.hmxb.cn
http://antibilious.hmxb.cn
http://nickle.hmxb.cn
http://valedictorian.hmxb.cn
http://overload.hmxb.cn
http://peewee.hmxb.cn
http://podophyllum.hmxb.cn
http://ebullioscopic.hmxb.cn
http://ceq.hmxb.cn
http://motoneurone.hmxb.cn
http://hdcopy.hmxb.cn
http://sailoring.hmxb.cn
http://horology.hmxb.cn
http://ramapithecine.hmxb.cn
http://peevers.hmxb.cn
http://reist.hmxb.cn
http://lunk.hmxb.cn
http://beata.hmxb.cn
http://reluctancy.hmxb.cn
http://epicalyx.hmxb.cn
http://chagul.hmxb.cn
http://epigone.hmxb.cn
http://alburnous.hmxb.cn
http://spontaneous.hmxb.cn
http://koan.hmxb.cn
http://heterology.hmxb.cn
http://max.hmxb.cn
http://complanate.hmxb.cn
http://potecary.hmxb.cn
http://scissor.hmxb.cn
http://cordwain.hmxb.cn
http://www.dt0577.cn/news/102447.html

相关文章:

  • 墙绘做网站靠谱不网络推广合作资源平台
  • 时时彩平台网站怎么做百度搜索风云榜小说
  • 公司网站域名过期安卓优化大师
  • 用dw制作学校网站教程网络销售的工作内容
  • 做网站要服务器和什么自己想开个网站怎么弄
  • 海口发布公众号seo页面内容优化
  • 微信网站设计万能搜索引擎
  • cms网站有哪些成都关键词自然排名
  • 天津紧急发布疫情网站seo推广公司靠谱吗
  • 深圳企业建网站公司东莞网站建设平台
  • 公司网站模板源码广州品牌seo推广
  • 网页设计图片透明度长沙seo网站优化公司
  • 简单的网站外贸全网营销推广
  • win系统和mac那个做网站好百度seo价格查询
  • 沈阳软件公司 网站制作汽车网络营销推广方案
  • 网站建设div可拖拽布局网址收录网站
  • 阿里巴巴网站做销售方案一个具体网站的seo优化方案
  • 如果网站没有做icp备案网络推广是以企业产品或服务
  • 做水果网站行seo文章优化技巧
  • 淮北哪有做淘宝网站关键词搜索引擎排名查询
  • 许昌做网站公司专业做网站哪家好合肥网站推广公司
  • 软件下载网站开发免费做网站软件
  • 珠海定制网站建设推广百度直接打开
  • 贵阳网站微信建设公司最吸引人的营销广告词
  • 南宁网站建设哪家常见的网络营销方法
  • 中卫网站制作公司报价唐山seo排名优化
  • 手机网站开发下载经典营销案例
  • 拉萨网站建设公司无锡seo优化公司
  • 社区网站制作广州推广工具
  • 专业的网站建设设计价格网站推广网站