因为不是计算机专业的,计算机基础不怎么闹靠。
最近利用在外企工作的这段时间,想深入学习下计算机基础,比如算法,数据结构等。
在看aha磊的算法书,并自己也写写代码。
从桶排序看起。
桶排序的核心思想其实很简单,
1. 对输入的数据有要求,必须是可数的范围,比如说一次考试的成绩(0-100之间,最多到0.5小数的精度),身高的排序(整数精度)等。这些用桶排序算法非常高效
2. 需要有一个该取值范围等长的数组(代码中为booked[11])来表示各个桶(各个取值范围)出现的次数。
可以参考: http://book.51cto.com/art/201405/441260.htm
代码如下:
#include <stdio.h>
#include <string.h>
void main()
{
int data[11]; // input data.
int booked[11]; // 10 buckets. From 1 to 10.
int num;
memset(booked, 0, 11*sizeof(int));
printf("input data Number:");
scanf("%d", &num);
printf("input data:");
for (int i=0; i<num; i++)
{
scanf("%d", &data[i]);
}
for (int i=0; i<num; i++)
{
booked[data[i]]++;
}
printf("data sorted:");
for (int i=0; i<10; i++)
{
for (int j=0; j<booked[i]; j++) // num cnt.
{
printf("%d,", i);
}
}
printf("\n");
}