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

有没有专门做胜负彩的网站上海服装网站建设

有没有专门做胜负彩的网站,上海服装网站建设,wordpress 调用精选评论,上海网站建设自学一.定义: 计数排序(Counting Sort)是一种非比较性质的排序算法,其时间复杂度为O(nk)(其中n为待排序的元素个数,k为不同值的个数)。这意味着在数据值范围不大并且离散分布的情况下,规…

  一.定义:

计数排序(Counting Sort)是一种非比较性质的排序算法,其时间复杂度为O(n+k)(其中n为待排序的元素个数,k为不同值的个数)。这意味着在数据值范围不大并且离散分布的情况下,规模越大,排序速度越快的特点。然而,如果数列元素不满足整数和有确定范围的条件,则不能使用计数排序。

二.原始代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>// 计数排序
void count_sort(int num[], int len) {// 寻找最大值int max = num[0];for (int i = 1; i < len; i++) {max = max > num[i] ? max : num[i]; // 更新最大值}int range = max + 1; // 计数数组的长度为最大值加1int *arr = (int *)malloc(sizeof(int) * range);	// 申请空间memset(arr, 0, sizeof(int) * range); // 初始化计数数组为0for (int i = 0; i < len; i++) {arr[num[i]]++; // 对每个元素进行计数}// 填充原数组int j = 0;for (int i = 0; i < range; i++) {while (arr[i] != 0) { // 将计数数组中的每个非零元素放回原数组num[j] = i; // 填充元素arr[i]--; // 计数减一j++; // 标记原数组填充到的位置}}free(arr); // 释放计数数组空间
}int main() {int num[12] = { 5, 8, 5, 4, 6, 8, 9, 7, 2, 3, 4, 5 };count_sort(num, 12); // 执行计数排序// 打印结果for (int i = 0; i < 12; i++){printf("%d ", num[i]);}return 0;
}

输出结果:

2 3 4 4 5 5 5 6 7 8 8 9

代码优点:

  1. 计数排序是一个非比较排序算法,对于一个给定的输入数组,不论数组中的数字如何分布,其时间复杂度始终稳定在O(n)。
  2. 擅长处理小范围大量重复的整数数据,效率非常高,实际运行速度通常比其他的O(n log n)比较类排序算法要快。

代码缺点:

  1. 计数排序算法只能用来排序整数,并且只能处理非负整数,对于负整数和小数,此算法无法正常工作,需要进行额外处理才能排序。
  2. 该排序算法需要额外的空间来存储计数数组,如果输入数据的范围(最大值-最小值)过大,将会导致空间的大量浪费。
  3. 如果待排序的数列中最大和最小数值的差过大,需要很大的辅助空间,因此空间复杂度显著上升,空间效率低。
  4. 计数排序是一种不稳定的排序,无法保证相同数值的元素在排序后保持原有的顺序。

三.优化代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>// 计数排序函数
void count_sort(int num[], int len) {int max = num[0];   // 初始化最大值为数组第一个元素int min = num[0];   // 初始化最小值为数组第一个元素// 找出数组中最大值和最小值for (int i = 1; i < len; i++) {max = max > num[i] ? max : num[i];min = min < num[i] ? min : num[i];}int range = max - min + 1;  // 计算最大值与最小值的差值和1(确定结果数组的大小)// 动态分配range大小的计数数组,并初始化为0int *arr = (int *)malloc(sizeof(int) * range);memset(arr, 0, sizeof(int) * range); // 计算每个元素出现的次数for (int i = 0; i < len; i++) {arr[num[i]-min]++;  // 使用当前元素值减去最小值作为索引}// 按升序排列原数组for (int i = 0, t = 0; i < range; i++) {while (arr[i] != 0) {num[t] = i + min;  // 使用当前索引加上最小值得到原始值t++;arr[i]--;   // 减去一个元素的计数}}// 释放动态分配的计数数组空间free(arr);
}int main() {// 待排序的数组int num[10] = { -10, 10, -9, 9, 8, 7, 7, 6, 6, 6 };// 使用计数排序算法进行排序count_sort(num, 10);// 输出排序后的数组元素for (int i = 0; i < 10; i++) {printf("%d ", num[i]);}return 0;
}

优化点:

1.可以实现包含负数的数组排序

http://www.yayakq.cn/news/847844/

相关文章:

  • 建立网站团队如何在自己的服务器上做网站
  • 如何免费做网站域名西宁市城乡规划和建设局网站
  • 长沙网站托管微信公众平台注册官网
  • 网站制作软件是什么潍坊 网站建设
  • 网站建设项目设计的图片阿里云做网站多少钱
  • seo外包公司需要什么郑州seo网络优化公司
  • 三亚学做网站培训营销活动策划公司
  • 网站建设服务公司选哪家比较好?签名字体在线生成器
  • 做logo的比赛网站城乡与建设部网站首页
  • 营销展示型网站建设价格网站维护需要做那些事
  • 保定网站建设公司哪家好外贸推广网站哪家
  • 深圳网站设计 制作网站认证收费吗
  • 什么好的网站学做食品做网站的每天打电话咋办
  • 企业网站特点和优势吉木萨尔县建设局网站
  • 做学校后台网站免费自助建站快速自助建站
  • 在什么网站做调查问卷资讯网站模版
  • 营销型网站收费江山有做网站开发吗
  • 高校工会网站建设海口网站建设高端
  • 网站新闻页设计深圳龙华住房和建设局网站
  • 网站建设项目软件开发招标文件中国有几家网络公司
  • 找人做软件网站wordpress修改固定连接
  • 网站建设兼职平台如何建设交流网站的论文
  • 湖州吴兴建设局网站小程序怎么添加手机桌面
  • 免备案网站怎么备案域名土石方工程网站
  • 全国的网站建设17素材网官网
  • seo网站提交怎么用上线了做网站
  • 做网站后台开发工资注册一个公司需要什么资料
  • 怎么推广自己的网站?4399游戏大全
  • 官方网站域名备案福州企业网站建设
  • 网站推广方式怎样做网站交易