void CountSort(int A[],int B[],int n){
int i,j,count;
for(i=0;i<n;i++){
count=0;
for(j=0;j<n;j++)
if(A[i]>A[j])
count++
B[count]=A[i];
}
遍历得到每个元素在整体中排的位置,已确定元素摆放新表对应位置。
比较次数n2,且需要额外空间,时间复杂度,空间复杂度都高。
对比简单选择排序:
void Swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void SelectSort(int A[],int n){
int i,j,min;
for(i=0;i<n-1;i++){ //i:0~n-1
min=i;
for(j=i+1;j<n;j++) //j:1~n
if(A[j]<A[min])
min=j;
if(min!=i)
Swap(A[min],A[i]);
}
}
1+2+..+(n-1)=n(n-1)/2次比较,且可在原地进行排序。