C语言桶排序原理:
举例一个数组:
arr1:
1, 2,4, 6,7, 4,5, 3
在定义一个数组;并且将数组内部的值初始定义为零:
arr2
0,0,0,0,0,0,0,0
因为我定义的这个数组是从1开始的,先从头扫描,在arr1数组中每读取到一个数据就把这个数据作为arr2数组的下标,并在这个下标所对应的值加一。
如上图所示:我们要给arr数组排序,我们又定义了一个新的数组arr2,全部为零,然后我们开始遍历第一个数组,我们每遍历到一个值,就把这个值在arr2数组中所对应下标对应的值加一.
代码:
#include<stdio.h>
void Fun1(){
int arr1[8]={1,2,4,6,7,4,5,3}; //定义数组一
int arr2[8]={0}; //定义数组二
int x;
int t;
for(t=0;t<=7;t++)
{
arr2[arr1[t]]=arr2[arr1[t]]+1;
//将数组一的值作为数组二的下标,数组一中每读取到一个同样的值就将这个下标对应的数组二的值加一
}
for(int z=0;z<=7;z++) //用循环输出
{
if(arr2[z]>0) //如果数组二内对应下标的值大于一就输出
{
x=arr2[z]; //因为有的值不是一次,所以需要一个容器储存数组二内对应下标的值
while(x>0)
{
printf("%d\n",z);
x--; //如果下标是一,就出输出一次然后“--”为零,如果不为一,则循环输出多次z的值
}
}
}
}
int main(){
Fun1();
return 0;
}