計數排序演算法
Ⅰ 計數排序的介紹
計數排序是一個非基於比較的排序演算法,該演算法於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語言實現計數排序、基數排序、桶排序演算法。
網上找吧,這些都是基本東西,要不買本數據結構的書看看