计数排序算法
Ⅰ 计数排序的介绍
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。
Ⅱ 计数排序(count sorting)
我认为这是桶排不知对不对。
program tpx;
var b:array[0..100] of integer;
k:0..100;
i:integer;
begin
write('Enter date:(0-100)');
for i:=0 to 100 do b[i]:=0;
for i:= 1 to n do
begin
read(k);
b[k]:=b[k]+1;
end;
writeln('Output data:');
for i:=0 to 100 do
while b[i]>0 do begin write(i:6);b[i]:=b[i]-1 end;
writeln;
end.
Ⅲ 计数排序的算法描述
前向星不需要像邻接表那样用指针指向下一条边,还是挺方便的。但是,由于前向星初始化需要快排一遍,相对邻接表要慢许多。考虑到一般图论题点数都不会很大,所以可以改为采用计数排序的思想对前向星进行排序。
一开始读入时,先算出每个点出去的边有多少条,然后计算出排序后每个点出去的第一条边位置应在哪里,最后把全部边扫一遍放到排序后应在的位置就好了。
这样排序的话初始化的时间复杂度就降到了O(m),总体时间并不会逊色于邻接表。 如果用快速排序,该算法的复杂度为O(nlog^2n)。改用计数排序后,复杂度降为O(nlogn)。
Ⅳ 请问各位谁知道[基数排序]和[计数排序]之间的差异啊
基数排序 (radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,借以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
计数排序是一个类似于桶排序的排序算法,其优势是对已知数量范围的数组进行排序。它创建一个长度为这个数据范围的数组C,C中每个元素记录要排序数组中对应记录的出现个数。
Ⅳ 计数排序算是一种桶排序么
那是基数排序
Ⅵ 计数排序的算法过程
假设输入的线性表L的长度为n,L=L1,L2,..,Ln;线性表的元素属于有限偏序集S,|S|=k且k=O(n),S={S1,S2,..Sk};则计数排序可以描述如下:
1、扫描整个集合S,对每一个Si∈S,找到在线性表L中小于等于Si的元素的个数T(Si);
2、扫描整个线性表L,对L中的每一个元素Li,将Li放在输出线性表的第T(Li)个位置上,并将T(Li)减1。
Ⅶ C++计数排序
不知道你想做什么…………
#include<iostream>
using namespace std;
void ChoiceSort( int a[],int n )
{
int count = 0, i , k = 0;
while( k < n )
{
for( i = 0 ; i < n ; i++ )
{
if( a[k] > a[i] )
count++;
}
if( count > 0 )
{
//swap( a[k] , a[count] );
int temp = a[k];
a[k] = a[i] ;
a[i] = temp;
}
if( count == 0 )
k++; //这里是永远不可能进入的,明白?
count = 0;
}
for( i = 0 ; i < n ; i++ )
cout << a[i] << " " ;
cout << endl;
return ;
}
int main()
{
int n = 5,a[5] = { 4,3,1,5,2};
ChoiceSort( a , n );
system("pause");
return 0;
}
你的K永远进不去,所以,你永远跳不出循环……
但是,你的算法能解释一下吗?反正不明白……透着一股东西
Ⅷ 编写算法实现计数排序。
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main ()
{
int a[1000],b[1000],i,j,k,n,t;
srand(time(0));
for(i=0;i<1000;i++)
a[i]=i;
for(i=999;i>0;i--)
{
j=rand()%i;
k=a[j];a[j]=a[i];a[i]=k;
}
printf("乱序、无重的数组: ");
for(i=0;i<1000;i++)
printf("%4d",a[i]);
for(i=0;i<1000;i++)
{
k=0;
for(j=0;j<1000;j++)
if(a[j]<a[i])k++;
b[k]=a[i];
}
printf("排序后的数组: ");
for(i=0;i<1000;i++)
printf("%4d",b[i]);
}
Ⅸ c语言实现计数排序,求代码,最好用链表
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "stdlib.h"
void main(void){
int n,*p,i,j,k;
printf("Input n...\nn=");
scanf("%d",&n);
if((p=(int *)malloc(sizeof(int)*n))==NULL){
printf("Application memory failure...\n");
exit(0);
}
for(i=0;i<n;scanf("%d",p+i++));
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k]>p[j]) k=j;
if(k!=i){
j=p[k];
p[k]=p[i];
p[i]=j;
}
}
for(i=0;i<n;printf("%d ",p[i++]));
printf("\n");
}
Ⅹ 用c语言实现计数排序、基数排序、桶排序算法。
网上找吧,这些都是基本东西,要不买本数据结构的书看看