《算法导论》——计数排序Counting Sort
今天贴出的算法是计数排序Counting Sort。在经过一番挣扎之前,我很纠结,今天这个算法在一些scenarios,并不是最优的算法。最坏情况和最好情况下,时间复杂度差距很大。
代码CountingSort.h:
#include <stdlib.h> namespace dksl
{
void Sort(int *numArray,int length)
{
int max=numArray[];
int *temp=new int[length];
for(int i=;i<length;i++)
{
temp[i]=;
if(max<numArray[i])
max=numArray[i];
}
int* C=new int[max+];
for(int i=;i<=max;i++)
C[i]=;
for(int i=;i<length;i++)
C[numArray[i]]=C[numArray[i]]+;
for(int i=;i<=max;i++)
C[i]=C[i]+C[i-];
for(int i=;i<length;i++)
{
temp[C[numArray[i]]-]=numArray[i];
C[numArray[i]]=C[numArray[i]]-;
}
for(int i=;i<length;i++)
numArray[i]=temp[i];
delete temp;
delete C;
}
}
测试:
// CountingSort.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include "CountingSort.h" using namespace std;
using namespace dksl;
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = {, , , , , , , , , };
Sort(a,);
cout<<"The sorted array is:";
for(int i = ; i < ; i++)
cout<<a[i]<<" ";
cout<<endl;
system("PAUSE");
return ;
}
结果:

《算法导论》——计数排序Counting Sort的更多相关文章
- 计数排序/Counting Sort
计数排序的算法思想: 对于每一个元素x,只要确定了元素x有多少个比它小的元素,那么就可以知道其最终的位置. 记输入数组为A[n],存放最后排序输出的数组为B[n],提供临时存储空间的中间数组记为C[k ...
- 计数排序Counting sort
注意与基数排序区分,这是两个不同的排序 计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长 大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶 ...
- 十大经典排序算法+sort排序
本文转自:十大经典排序算法,其中有动图+代码详解,本文简单介绍+个人理解. 排序算法 经典的算法问题,也是面试过程中经常被问到的问题.排序算法简单分类如下: 这些排序算法的时间复杂度等参数如下: 其中 ...
- counting sort 计数排序
//counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorit ...
- 排序算法六:计数排序(Counting sort)
前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...
- 【算法】计数排序(Counting Sort)(八)
计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范 ...
- 【算法导论】【排序】—— 计数排序(counting sort)
计数排序的特点: 需要额外的数组以存储: 中间过程数据(记为数组 C),数组 C 的下标是待排序序列的元素值,下标对应的值为出现的次数: 排序后的序列(记为 B),计数排序仅获取原始待排序序列的值,对 ...
- 数据结构与算法-排序(八)计数排序(Counting Sort)
摘要 计数排序本质就是统计不同元素出现的次数,然后将元素依次从小到大放置,每个元素看统计的次数,就紧挨着放置几个同样的元素. 看似简单的处理,在算法中,会依据统计的元素次数推算出每个元素的索引位置,这 ...
- 计数排序与桶排序(bucket sort)
Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...
随机推荐
- mongodb的db.collection is not function
mongodb的3.0版本之前: 如2.3版本,可以直接使用db调用collection来操作数据 但在3.0版本以上,会报错:db.collection is not a function 3.0版 ...
- SQL-45 将titles_test表名修改为titles_2017。
题目描述 将titles_test表名修改为titles_2017.CREATE TABLE IF NOT EXISTS titles_test (id int(11) not null primar ...
- SQL-41 构造触发器
题目描述 构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中.CREATE TABLE employees_test(ID IN ...
- VIM入门
目录 一.vim介绍 二.vim颜色显示和移动光标 三.vim一般模式下移动光标 四.vim一般模式下复制.剪切和粘贴 五.进入编辑模式 六.vim命令模式 七.vim实践 一.vim介绍 vi是最重 ...
- centos打开matlab的正确姿势
进入usr/local/MATLAB/R2015b/bin ./matlab
- Linux系统基本操作命令
1.文件与文件夹(目录)操作命令 可以参考:http://www.runoob.com/linux/linux-command-manual.html 1)rm:删除命令 例:$ rm -i 文 ...
- DoTween的用法
using UnityEngine;using System.Collections;using DG.Tweening;using UnityEngine.UI; public class Test ...
- windows Jenkins git 配置
待更新 插件下载地址:http://updates.jenkins-ci.org/download/plugins/ 参考地址:https://blog.csdn.net/zzy1078689276/ ...
- python基础之centos6.5 升级 python2.7, 安装pip, MySQLdb
这个仅仅是为了运行脚本需求, 将centos6.5中的 python 2.6.6升级到了 2.7 并且安装和了 pip 和 MySQLdb 1.先装依赖 yum install zlib-devel ...
- offsetWidth与clientWidth 区别
offsetWidth //元素宽度.内边距和边框,不包括外边距 offsetHeight //元素高度.内边距和边框,不包括外边距 clientWidth //元 ...