#include<stdio.h>
#define Max_len 9
void Show(int arr[], int n)
{
int i;
printf("数组为 ");
for ( i=0; i<n; i++ )
printf("%d ", arr[i]);
printf("\n");
}
int GetminVal(int* arr,int len)
{
int minVal=arr[0];
for(int i=1;i<len;i++)
{
if(arr[i]<minVal)
minVal=arr[i];
}
printf("\n\n\n最小值为%d ",minVal);
return minVal;
}
int GetMaxVal(int* arr, int len)
{
int maxVal = arr[0];
for(int i = 1; i < len; i++)
{
if(arr[i] > maxVal)
maxVal = arr[i];
}
printf("\n\n\n最大值为%d ",maxVal);
return maxVal;
}
void BucketSort(int* arr , int len)
{
int tmpArrLen = GetMaxVal(arr , len) + 1;
int tmpLen = GetminVal(arr , len) + 1;
int tmpArr[tmpArrLen];
int i, j;
for( i = 0; i < tmpArrLen; i++)
tmpArr[i] = 0;
for(i = 0; i < len; i++)
tmpArr[ arr[i] ]++;
for(i = 0, j = 0; i < tmpArrLen; i ++)
{
while( tmpArr[ i ] != 0)
{
arr[j ] = i;
j++;
tmpArr[i]--;
}
}
}
int main()
{
int arr_test[Max_len] = { 11, 9, 20, 56, 42, 3, 7, 15, 16};
Show( arr_test, Max_len );
BucketSort( arr_test, Max_len);
Show( arr_test, Max_len );
return 0;
}