数据结构-计数排序
来源:互联网 发布:做淘宝亏钱 编辑:程序博客网 时间:2024/06/04 17:43
计数排序算法没有用到元素间的比较,它利用元素的实际值来确定它们在输出数组中的位置。通过以下几步就可以实现:
<1>:先遍历数组,找出最大值和最小值;
<2>:利用最大值最小值的差值,开辟一个大小为max-min+1的临时数组,并将元素初始化为0;
<3>:遍历源数组,把源数组每个元素的值减去min后作为临时数组的下标,同时在临时数组中对对应下标的数值进行自增操作;源数组元素值 - min 作为 临时数组的下标。
<4>:遍历临时数组,按照上面的公式,源数组的元素值 == 临时数组的下标 + min;需要注意的是可能源数组中一个数字出现了多次,所有在遍历时需要使用while循环,直至临时数组的元素值都减到0.
实现代码:
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <vector>using namespace std;void CountSort(int* arr, int sz){ int max = arr[0]; int min = arr[0]; //遍历找到最大最小值 for (int i = 0; i < sz; i++) { if (arr[i] > max) max = arr[i]; if (arr[i] < min) min = arr[i]; } int len = max - min +1; vector<int> tmp(len, 0); for (int i = 0; i < sz; i++) tmp[arr[i] - min]++; //开始排序 int index = 0; for (int i = 0; i < tmp.size(); i++) { while (tmp[i]--) arr[index++] = i + min; }}int main(){ int arr[] = { 1,5,5,7,2,11}; CountSort(arr,sizeof(arr)/sizeof(arr[0])); system("pause"); return 0;}
临时数组对应截图
阅读全文
1 0
- 数据结构_计数排序
- [数据结构]计数排序
- 数据结构之计数排序
- 数据结构--计数排序
- 夕拾-数据结构-计数排序
- 数据结构-计数排序
- 【数据结构与算法】计数排序
- C数据结构---计数排序实现
- 【数据结构】中的计数排序(CountSort)
- 【数据结构与算法】计数排序
- scala数据结构和算法-10-计数排序
- 数据结构-从计数排序到基数排序
- 数据结构基础加强之计数排序
- 【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
- 【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
- 【数据结构】非比较排序--计数排序和基数排序
- 基础数据结构算法_计数排序,基数排序,桶排序
- 算法与数据结构-常用排序算法总结2-计数排序
- 理解over()开窗函数
- PHP+Redis 操作
- 侧栏
- Ubuntu 16.04
- 单列集合
- 数据结构-计数排序
- Universal 2nd Factor (U2F) 概述(7)-FIDO协议支持廉价的U2F设备
- java之动态代理初探
- 栈和队列
- Apache-伪静态配置
- js使用animation
- HCS12X–数据定义(如何在CodeWarrior中将数据定义到分页区)
- tcp之backlog参数
- hadoop面试题整理