计数排序法:计数数组适用于当前数组密集的情况。例如(2,3,5,4,2,3,3,2,5,4)

方法:先找出最大值最小值,之后统计每个数出现的次数,根据次数从小到大往数组里添加

计数排序法是一种不需要比较的排序方法

 void count(int top,int length,int arr[])
{
int min=arr[],max=arr[],i=,j=;
int *count=(int*)malloc(sizeof(int)*(max-min+));
if(arr==NULL||length<=)return; while(i<length)//先找出最大和最小值
{
if(min>arr[i])
{
min=arr[i];
}
if(max<arr[i])
{
max=arr[i];
}
i++;
} i=; while(i<length)//根据最大最小值创建一个动态数组并且初始化计数数组
{
count[i]=;
i++;
}
i=; while(i<length)//计算数组中某个数出现的次数
{
count[arr[i]-min]++;//count的下标加上最小值就是数组中的某个值
i++;
}
for(i=;i<(max-min+);i++)
{
while(count[i]!=)//当次数为零时候,遍历count中下一个值
{
arr[j]=min+i;//从小到大取出在count数组中存的值并且赋给原数组
count[i]--;//每取出一个数,这个数在count中存的次数减一
j++;
}
} }
insert Sort:将原有的数组分为两部分,一部分是无序的一部分是有序的,将无序数组第一个不断插入有序的。
插入排序适合的两种情况:
1.每一个元素距离其最终位置不远的时候选择
2.对于元素较少的数组我们插入排序最快(如果N过于小受系数影响)
void select(int arr[],int n)
{
int i=,j=,temp;//定义变量
for(i;i<n;i++)//外层循环
{
j=i;
temp=arr[i];//保存定位置的数 while(arr[j-]>temp&&j>)//无序第一个与有序最后一个比较
{
arr[j]=arr[j-];//如果有序最后一个大于无序第一个,有序最后一个的值赋予无序
j--;//无序与有序倒数第二个比,直到找到有序比它小的或者到有序第一个位置
}
arr[j]=temp;//把无序最后一个的值赋予最终位置
}
}

计数排序(Count Sort )与插入排序(Insert Sort)的更多相关文章

  1. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  2. 排序算法一:插入排序(Insertion sort)

    最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根 ...

  3. 计数排序详解以及java实现

    前言 我们知道,通过比较两个数大小来进行排序的算法(比如插入排序,合并排序,以及上文提到的快速排序等)的时间复杂度至少是Θ(nlgn),这是因为比较排序对应的决策树的高度至少是Θ(nlgn),所以排序 ...

  4. 计数排序与桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  5. counting sort 计数排序

    //counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorit ...

  6. 排序算法--插入排序(Insertion Sort)_C#程序实现

    排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  7. 经典排序算法 – 插入排序Insertion sort

    经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...

  8. Uva-------(11462) Age Sort(计数排序)

    B Age Sort Input: Standard Input Output: Standard Output   You are given the ages (in years) of all ...

  9. c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,

    #include <iostream.h> #define  MAX 100 void dispaly(int a[],int n) {     for(int i=0;i<n;i+ ...

随机推荐

  1. android学习笔记48——SQLite

    SQLite SQLite试试一个嵌入式的数据库引擎,专门用于资源有限的设备(如手机.PDA)上适量数据存取. SQLite支持绝大部分SQL92语法,同样允许开发者使用SQL语句操作数据库中的数据, ...

  2. 关于snprintf的一个warning

    在编一段代码时用到snprintf,有个很奇怪的warning 编译提示: warning C4013: 'snprintf' undefined; assuming extern returning ...

  3. JavaScript 中 4 种常见的内存泄露陷阱

    了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...

  4. PageRank算法

    PageRank,网页排名,又称网页级别,传说中是PageRank算法拯救了谷歌,它是根据页面之间的超链接计算的技术,作为网页排名的要素之一.它通过网络浩瀚的超链接关系来确定一个页面的等级.Googl ...

  5. DBA_Oracle Erp版本升级12.1.1到R12.1.3(案例)

    20150506 Created By BaoXinjian

  6. Linux命令(20)查看当前网速

    Linux查看网络即时网速 sar -n DEV 1 100 1代表一秒统计并显示一次 100代表统计一百次 还可以使用ntop工具

  7. php表单数据验证类

    非常好用方便的表单数据验证类 <?php //验证类 class Fun{ function isEmpty($val) { if (!is_string($val)) return false ...

  8. 学习“要件审判九步法”,正确处理五个关系 z

    学习“要件审判九步法”,正确处理五个关系 2015-06-29 07:39:07 | 来源:人民法院报第二版 | 作者:阮丹军 “要件审判九步法”,是邹碧华法官总结审判和审判管理双重经验后的心血之作, ...

  9. oracle查看所有表的数据量

    源地址:http://blog.csdn.net/zhanggnol/article/details/6683697 select t.table_name,t.num_rows from user_ ...

  10. C++学习9 this指针详解

    this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址).通过 this,可以访问当前对象的成员变量和成员函数. 所谓当前对象,就是正在使用的对象,例如对于stu. ...