计数排序

算法导论第107页,计数排序的思想就是计算数组a中的某元素,若其大于x个数,则将它放入第x+1个位置。仿照书上的伪代码写的。代码如下:

// CountSort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//思想如有数组a中的某元素大于x个数,则将它放入第x+1个位置
void main(int argc, char* argv[])
{

int a[]={2,5,3,0,2,3,0,3};//排序区间在【0,5】之间
printf("计数排序前");
int i;
for(i=0;i<8;i++){
	printf("%3d",a[i]);
}


int c[6];
int j; 
//初始化 辅助数组c 
for(j=0;j<6;j++){
   c[j]=0;//
}


//用辅助数组c保存a中某值出现的次数   即数组c的下标为a中元素的值,数组c的值为a中该与元素相等的值个数 
int m;
for(m=0;m<8;m++){
	c[a[m]]=c[a[m]]+1;
} 


//对于数组c中每个下标(数组a中的值),计算该下标的与之前下标的值的总和(即求数组a中有多少值是小于数组中a的某值的)
int n;
for(n=1;n<6;n++){
	c[n]=c[n]+c[n-1];
} 


int p; 
int b[8]; 

for(p=7;p>-1;p--){
b[c[a[p]]-1]=a[p];
c[a[p]]=c[a[p]]-1;//放入b数组后,与a值相等的 个数减一 (用来避免数相等的情况) 
}

printf("计数排序后");
int q;
for(q=0;q<8;q++){
	printf("%3d",b[q]);
}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值