voidbucketSort(doublearray[], int size){ // 求数组最大值和最小值,并算出差值d double max = array[0]; double min = array[0]; for (int i = 1; i < size; i++) { if (array[i] > max) { max = array[i]; } if (array[i] < min) { min = array[i]; } } double d = max - min; // 一般创建的桶数量等于原始数列的元素数量,除了最后一个桶只包含数列最大值,前面各个桶的区间按照比例确定 // OR 桶数量等于原始数列的元素数量+1,除了第一个桶只包含数列最小值,最后一个桶只包含数列最大值,中间各个桶的区间按照比例确定 int bucketNum = size; vector<list<double>> bucketArr(bucketNum); // 遍历数组,将每个元素放入桶中 for (int i = 0; i < size; i++) { int num = (int)((array[i] - min) * (bucketNum - 1) / d); bucketArr[num].push_back(array[i]); } // 对每个桶内部进行排序 for (int i = 0; i < bucketArr.size(); i++) { bucketArr[i].sort(); } // 放入数组 int i = 0; for (auto& bucket : bucketArr) { for (auto& d : bucket) { array[i++] = d; } } }