码迷,mamicode.com
首页 > 编程语言 > 详细

计数排序(Count Sort )与插入排序(Insert Sort)

时间:2016-11-15 23:42:51      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:length   统计   距离   style   遍历   初始化   sel   return   排序   

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

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

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

 1 void count(int top,int length,int arr[])
 2 {
 3     int min=arr[0],max=arr[0],i=1,j=0;
 4     int *count=(int*)malloc(sizeof(int)*(max-min+1));
 5     if(arr==NULL||length<=0)return;
 6 
 7     while(i<length)//先找出最大和最小值
 8     {
 9         if(min>arr[i])
10         {
11             min=arr[i];
12         }
13         if(max<arr[i])
14         {
15             max=arr[i];
16         }
17         i++;
18     }
19 
20     i=0;
21     
22     while(i<length)//根据最大最小值创建一个动态数组并且初始化计数数组
23     {
24         count[i]=0;
25         i++;
26     }
27     i=0;
28     
29     while(i<length)//计算数组中某个数出现的次数
30     {
31         count[arr[i]-min]++;//count的下标加上最小值就是数组中的某个值
32         i++;
33     }
34     for(i=0;i<(max-min+1);i++)
35     {
36         while(count[i]!=0)//当次数为零时候,遍历count中下一个值
37         {
38             arr[j]=min+i;//从小到大取出在count数组中存的值并且赋给原数组
39             count[i]--;//每取出一个数,这个数在count中存的次数减一
40             j++;
41         }
42     }
43 
44 }
insert Sort:将原有的数组分为两部分,一部分是无序的一部分是有序的,将无序数组第一个不断插入有序的。
插入排序适合的两种情况:
1.每一个元素距离其最终位置不远的时候选择
2.对于元素较少的数组我们插入排序最快(如果N过于小受系数影响)
void select(int arr[],int n)
{
    int i=1,j=0,temp;//定义变量
    for(i;i<n;i++)//外层循环
    {
        j=i;
         temp=arr[i];//保存定位置的数
        
            while(arr[j-1]>temp&&j>0)//无序第一个与有序最后一个比较
            {
                arr[j]=arr[j-1];//如果有序最后一个大于无序第一个,有序最后一个的值赋予无序
                j--;//无序与有序倒数第二个比,直到找到有序比它小的或者到有序第一个位置
            } 
            arr[j]=temp;//把无序最后一个的值赋予最终位置
  }
}

 

 

计数排序(Count Sort )与插入排序(Insert Sort)

标签:length   统计   距离   style   遍历   初始化   sel   return   排序   

原文地址:http://www.cnblogs.com/lianggongchunri/p/6067583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!