排序算法-桶排序

因爲不是計算機專業的,計算機基礎不怎麼鬧靠。

最近利用在外企工作的這段時間,想深入學習下計算機基礎,比如算法,數據結構等。

在看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");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章