计数排序(Count Sort )与插入排序(Insert Sort)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计数排序(Count Sort )与插入排序(Insert Sort)相关的知识,希望对你有一定的参考价值。
计数排序法:计数数组适用于当前数组密集的情况。例如(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)的主要内容,如果未能解决你的问题,请参考以下文章
ICS计算系统概论LC3汇编实验Lab4—排序和计数 Sort and Count