数据结构_计数排序

// 数据结构_记数排序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
/*计数排序
计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数
计数排序的运行时间为n*/
/*算法导论中的伪代码
COUNTING-SORT(A,B,k)
1 for i <- 0 to k
2 do C[i] <- 0
3 for j <- 1 to length[A]
4 do C[A[j]] <- C[A[j]] + 1
5 // C[j] 包含等于i的元素个数
6 for i <- 1 to k
7 do C[i] <- C[i] + C[i-1]
8 // C[i] 包含小于等于i的元素个数
9 for j <- length[A] downto 1
10 do B[C[A[j]]] <- A[j]
11  C[A[j]] <- C[A[j]] - 1
*/
/*计数排序的时间复杂度为N*/

#define array_length 10
#define k 5

int main(int argc, char* argv[])
{
    int i = 0,j = 0;

 int a[]= {1,2,5,3,0,2,3,0,3,4};

 int b[array_length];

 /*这里我们以小于5的数做例子*/

 int c[k+1];

 int length;

 length = 8;

 /*我们因为是计算小于等于5的各个非负整数的个数,所以这里我们只需要6个空间
 首先将其清零
 
 */

 for(i = 0; i < k+1;i++){

  c[i] = 0;

 }
    /*这里,我们用待计算数组,也就是a数组的值做为c数组的的下标
 所以,经过下面的循环后,c数组中的存储的是,a数组0,1,2,3,4,5的个数

 */
 for(j = 1; j < array_length; j++){

  c[a[j]] = c[a[j]] + 1;

 }
 /*下面这个循环就是,得到小于等于0,1,2,3,4,5的个数*/
 for(i = 1; i < k+1;i++){

  c[i] = c[i] + c[i-1];
 }

 /*
 
 */
 for(j = array_length-1; j > 0; j--){

  b[c[a[j]]] = a[j];

  c[a[j]] = c[a[j]] - 1;
 }

 printf("\n");

 for(j = 1; j < array_length; j++){
  
  printf("%d ",b[j]);
  
 }

 

 return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值