因爲不是計算機專業的,計算機基礎不怎麼鬧靠。
最近利用在外企工作的這段時間,想深入學習下計算機基礎,比如算法,數據結構等。
在看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");
}