算法介绍:
桶排序是一个平常快的排序算法。该算法的基本思想是由E.J.Issac和R.C.Singleton提出来的。但是在本篇文章中并不是完整的桶排序,完整的我还没学(狗头)。
算法基本思想:
桶排序顾名思义就是需要用类似“桶”的“容器”来帮忙排序。首先我们根据要求定义数组,例如要将1000以内的数进行排序,那我们就定义一个book[1001](此处book有标记的意识每一个“桶”的作用其实就是“标记”)。接着通过循环将book初始化为0。在输入要排列的数,将数读到T,且每读一个T将book[T]加一。输出部分依次判断book[0]~book[1000],若大于0,则需要打印,数为几就打印几次。
代码如下:
#include<stdio.h> int main() { int n ; scanf("%d" , &n); //输入一个数n,表示接下来有n个数 int m ; int book[1001]; for( m = 0 ; m <= 1000 ; m ++){//初始化为0 book[m] = 0 ; } int T ; for( m = 0 ; m < n ; m ++){ //循环读入每一个数,并进行桶排序 scanf("%d" ,&T); //把每一个数读到变量T book[T] ++; //进行计数,对编号为T的桶进行标记 } for( m = 0 ; m <= 1000 ; m ++ ){//依次判断编号0~1000的桶 if(book[m] != 0){ for( ; book[m] != 0 ; book[m] -- ){//出现几次就将桶的编号打印几次 printf("%d " , m); } } } return 0; }
结果如下:
补充:
之前说过本文章的桶排序不完整。举个例子:将班上的人成绩与名字进行桶排序,如果进行刚刚简化版的桶排序算法仅仅是把成绩排序,但没有对人本身进行排序。所以完成不了问题。让我们继续学习,补充完整桶排序吧。