排序算法9----计数排序(C)

        计数排序是一种非比较排序,不比较大小 。

        1、思想

        计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 

        2、步骤       

        1、统计数据:统计每个数据出现了多少次。(建立一个count数组,范围从[MIN,MAX],MAX代表arr中最大的一个数,MIN对应arr中最小的一个数,然后for循环遍历arr,出现一个数,就在count中对应位置++)。这叫count和arr相对映射。(相对最小值和最大值来开count的范围)

        2、用count覆盖arr: 因为count的下标代表arr中的数据值,count的内容代表出现的次数。

27b2c9cc31c94a23bc6a5ace24773f9a.png

 

        3、效率极高

        特点时间复杂度:O(aN+countN(范围)),即O( MAX {N,范围} )

               空间复杂度: O(范围)

        局限性:1、不适合分散的数据,更适合比较集中连续的数据。

                       2、不适合浮点数、字符串、结构体数据排序。,只适合整数(包括负数),因为count和arr是相对映射。

        4、代码

void CountingSort_incline(int*arr,int n)
{//找范围int min = arr[0], max = arr[0];for (int i = 0; i < n; i++){if (arr[i] < min)min = arr[i];if (arr[i] > max)max = arr[i];}int range = max - min + 1;//开count数组int* count = (int*)calloc(range, sizeof(int));if (count == NULL){perror("calloc fail\n");exit(-1);}//统计次数for (int i = 0; i < n; i++){count[arr[i] - min]++;//相对位置++,不是绝对位置}//count“覆盖”回去arrint i = 0;for (int j = 0; j < range; j++){while (count[j]--)//即看下标(相对数)出现了几次,就覆盖回去几次{arr[i++] = j+min;//j+min代表还原,即从相对位置得到原来的绝对值}}/*	例如:{-1,1,3,2,1,5,1,6};min = -1,max = 6;count[8];则每个数的相对值为arr[i] - min = arr[i] + 1;得到相对{0,2,4,3,2,6,2,7}
所以:count(下标出现次数):1  0  3  1  1  0  1  1相对下标:0  1  2  3  4  5  6  7下标还得到原数组元素的绝对值(下标 + min):{ -1,0,1,2,3,4,5,6 },分别对应次数{1,0,3,1,1,0,1,1};则覆盖回去arr数组:{-1,1,1,1,2,3,5,6};*/
}

        5、实现效果

	int arr[] = { 1,3,10,2,1,3,1,5,11,-2 };int size = sizeof(arr) / sizeof(int);printf("原数组\n");for (int i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");printf("排序后\n");CountingSort_incline(arr,size);for (int i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");

原数组:1,3,10,2,1,3,1,5,11,-2

排序后:-2,1,1,1,2,3,3,5,10,11

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/417941.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity-Arduino Bluetooth Plugin蓝牙插件使用时需要注意的一些事项(附插件下载链接)

一些参考链接 1.Android 无法扫描蓝牙设备踩坑 2.权限相关 1-首先要明确你的蓝牙设备是经典蓝牙还是低功耗&#xff08;BLE)蓝牙&#xff1a; 转载&#xff1a;Android蓝牙开发—经典蓝牙和BLE&#xff08;低功耗&#xff09;蓝牙的区别 2.如果是BLE蓝牙&#xff0c;需要打勾…

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中&#xff0c;对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台&#xff0c;创新地模拟荧光显微管在滑动实验中的动态行为&#xff0c;这一过程不仅提升了实验效率&#xff0c;还为…

MacMaster:一款功能强大的高级网络接口管理与监控工具

关于MacMaster MacMaster是一款功能强大的高级网络接口管理与监控工具&#xff0c;该工具专为网络安全研究人员打造&#xff0c;支持对各种不同系统网络接口的MAC地址进行管理。 MacMaster本质上是一个全面的命令行工具&#xff0c;该工具在设计之初就考虑到的简单性和功能性…

【算法详解】力扣162.寻找峰值

​ 目录 一、题目描述二、思路分析 一、题目描述 力扣链接&#xff1a;力扣162.寻找峰值 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个…

cetos7搭建部署k8s 版本1.28

主机分配 内存最少是4G cpu个数最少两个 IP内存CPU主机名192.168.231.12044K1 192.168.231.12144K2192.168.231.12244K3 关闭防火墙 systemctl stop firewalled 关闭swap vim /etc/fstab 设置主机名称 hostnameset 安装docker 三个主机 初始化集群 在mas…

机器学习之聚类-2D数据类别划分

无监督学习&#xff08;Unsupervised Learning&#xff09; 机器学习的一种方法&#xff0c;没有给定事先标记过的训练示例&#xff0c;自动对输入的数据进行分类或分群。 方式一&#xff1a;站着或坐着 方式二&#xff1a;全身或半身 方式三&#xff1a;蓝眼球或不是蓝眼球 …

CVE-2023-46226 Apache iotdb远程代码执行漏洞

项目介绍 Apache IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点&#xff0c;完美对接 Hadoop 与 Spark 生态&#xff0c;适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。 项目地址 https://io…

Leetcode刷题-(6~10)-Java+Python+JavaScript

算法题是程序员的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写算法题吧 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就…

python代码的保护之Pyarmor(一)

我们在用python程序开发完程序后&#xff0c;进行程序发布。发布后要保证算法的安全性&#xff0c;常常需要对代码进行保护&#xff0c;通过这段时间的搜集整理&#xff0c;目前常见的保护方式有&#xff1a;代码混淆加密、编译成二进制动态库、 本篇讲述Pyarmor加密 参考链接&…

Java 面向对象02 封装 (黑马)

人画圆&#xff1a;画圆这个方法应该定义在园这个类里面。 人关门&#xff1a;是人给了门一个作用力&#xff0c;然后门自己关上了门&#xff0c;所以关门的方法是在门的类里面 封装对象的好处&#xff1a; 调用Java自带的方法举例实现&#xff1a; 在测试类中&#xff0c;对其…

聊一聊 C# 的线程本地存储TLS到底是什么

一&#xff1a;背景 1. 讲故事 有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的&#xff1f;这么说吧&#xff0c;C#的ThreadStatic是假的&#xff0c;因为C#完全是由CLR&#xff08;C&#xff09;承载的&#xff0c;言外之意C#的线程本地存储&#xff…

长风破浪会有时

工作半年了&#xff0c;实际的工作体验跟当初想象的好像是不太一样。感觉还是在学校读书好啊 方向&#xff1f; 半年没更了&#xff0c;偶尔也有些网友私信问我DSP相关的问题&#xff0c;但是我现在也没有继续做DSP了&#xff0c;很多也都忘了&#xff0c;所以可能帮不上什么…