以前认为负数不可做
只需要多开点儿空间维护一下负数就好了
1 #include<iostream> 2 using namespace std; 3 int main() { 4 int book[100] = {0};//标志位,标记桶内数据量 5 int bookN[100] = { 0 };//标志负位 6 int input[11]; 7 int heap[100] = {0};//初始化堆,排序0到100之间的数,heap[排序范围最大值] 8 int i,j; 9 int result; 10 for (size_t i = 1; i <=10 ; i++) 11 { 12 cin >> input[i]; 13 14 if (input[i]>=0)//排序的数为正数 15 { 16 heap[input[i]] = 1; 17 book[input[i]] += 1; 18 } 19 else//排序的数为负数 20 { 21 input[i] = abs(input[i]); 22 heap[input[i]] = 1; 23 bookN[input[i]] += 1; 24 25 26 } 27 } 28 for (int i = 99; i>=0; i--)//输出负数的排序结果,因为负数,所以桶从序号大的到序号小的遍历 29 { 30 if (heap[i] == 1) { 31 for (j = 1; j <= bookN[i]; j++) 32 { 33 result = 0 - i; 34 cout << result << " ";//输出排序结果 35 } 36 37 } 38 } 39 for (int i = 0; i <100 ; i++)//输出正数的排序结果 40 { 41 if (heap[i]==1) { 42 for ( j = 1;j<=book[i]; j++) 43 { 44 cout << i << " ";//输出排序结果 45 } 46 47 } 48 } 49 cout << endl; 50 getchar(); 51 52 return 0; 53 }
桶排序的时候你必须保证数据是离散的,离散程度是均一的
而且数据范围不能让空间无法承受