当前位置:网站首页>Bucket sort
Bucket sort
2022-07-05 05:08:00 【ximen502_】
The content and code of this article come from 《 Comics algorithm 》.
For the limitation of counting sorting , Bucket sorting makes up , The time complexity is also linear . It is similar to the statistical array created by counting sort , Bucket sorting requires the creation of several buckets to help sort .
So what is called in bucket sorting “ bucket ”, And what is it ?
Every bucket (bucket) It's an interval , It can hold one or more elements .
Suppose there is a non integer sequence as follows :
4.5,0.84,3.25,2.18,0.5
Let's see how bucket sorting works .
The first step in bucket sorting , It's about creating these buckets , And determine the interval range of each barrel .
How many barrels need to be built , How to determine the range of the bucket , There are many different ways , The number of buckets we create here is equal to the number of elements in the original sequence . Except that the last bucket contains only the maximum value of the sequence , The interval of each barrel in front , Determined in proportion .
Interval span = ( Maximum - minimum value ) / ( The number of barrels - 1)
The first 2 Step , Traversing the original sequence , Put the elements in the right place and put them in each bucket .
The first 3 Step , Sort the elements inside each bucket separately 
The first 4 Step , Go through all the buckets , Output all elements .
0.5, 0.84, 2.18, 3.25, 4.5
End of sort
java The implementation is as follows :
double[] bucketSort(double[] arr) {
// 1. Get the maximum and minimum values of the sequence
double max = 0;
double min = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
double d = max - min;
// 2. Initialize bucket
int bucketNum = arr.length;
ArrayList<LinkedList<Double>> bucketList = new ArrayList<>(bucketNum);
for (int i = 0; i < bucketNum; i++) {
bucketList.add(new LinkedList<Double>());
}
// 3. Traverse the original array , Put each element in a bucket ( This step )
for (int i = 0; i < arr.length; i++) {
int num = (int) ((arr[i] - min) * (bucketNum - 1) / d);
bucketList.get(num).add(arr[i]);
}
// 4. Sort the inside of each bucket
for (int i = 0; i < bucketList.size(); i++) {
// JDK Adopt the optimized version of merging sorting or merging
Collections.sort(bucketList.get(i));
}
// 5. Output all elements
double[] sortedArr = new double[arr.length];
int index = 0;
for (LinkedList<Double> list : bucketList) {
for (double element : list) {
sortedArr[index] = element;
index++;
}
}
return sortedArr;
}
@Test
public void fun1() {
double[] arr = new double[] {
4.12, 6.421, 0.0023, 3.0, 2.123, 8.122, 4.12, 10.09 };
double[] sortedArr = bucketSort(arr);
System.out.println(Arrays.toString(sortedArr));
}
summary :
The time complexity of bucket sorting :O(n), Spatial complexity O(n)
The performance of bucket sorting is not absolutely stable . If the distribution of elements is extremely uneven , In extreme cases , In the first bucket n-1 Elements , There is 1 Elements . At this time, the time complexity will degenerate into O(nlogn), And also created many empty barrels for nothing .
thus it can be seen , There is no absolutely good algorithm , There is no absolutely bad Algorithm , The key depends on the specific scene .
边栏推荐
- Unity enables mobile phone vibration
- PR first time
- Use assimp library to read MTL file data
- [LeetCode] 整数反转【7】
- Lua GBK and UTF8 turn to each other
- How to choose a panoramic camera that suits you?
- Data is stored in the form of table
- Personal required code
- China polyurethane rigid foam Market Research and investment forecast report (2022 Edition)
- Panel panel of UI
猜你喜欢

Page countdown

2022 U.S. college students' mathematical modeling e problem ideas / 2022 U.S. game e problem analysis

Download and use of font icons

Optimization scheme of win10 virtual machine cluster

嵌入式数据库开发编程(六)——C API

AutoCAD - full screen display

Magnifying glass effect

Do a small pressure test with JMeter tool

AutoCAD -- dimension break

Embedded database development programming (VI) -- C API
随机推荐
mysql审计日志归档
【Leetcode】1352. 最后 K 个数的乘积
C # perspective following
Magnifying glass effect
Cocos create Jiugongge pictures
LeetCode之單詞搜索(回溯法求解)
AutoCAD - full screen display
Sixth note
Judge the position of the monster in the role under unity3d
Simple modal box
中国溶聚丁苯橡胶(SSBR)行业研究与预测报告(2022版)
Redis has four methods for checking big keys, which are necessary for optimization
UE4/UE5 虚幻引擎,材质篇,纹理,Compression and Memory压缩和内存
MySQL audit log Archive
2022 thinking of mathematical modeling C problem of American college students / analysis of 2022 American competition C problem
Listview is added and deleted at the index
Panel panel of UI
54. Spiral matrix & 59 Spiral matrix II ●●
cocos2dx_ Lua card flip
AutoCAD -- dimension break