当前位置:网站首页>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 .
边栏推荐
- 【Leetcode】1352. 最后 K 个数的乘积
- 【Leetcode】1352. Product of the last K numbers
- "Measuring curve length" of CAD dream drawing
- 3dsmax2018 common operations and some shortcut keys of editable polygons
- [leetcode] integer inversion [7]
- Recherche de mots pour leetcode (solution rétrospective)
- 3dsmax snaps to frozen objects
- 2022 thinking of mathematical modeling C problem of American college students / analysis of 2022 American competition C problem
- Basic knowledge points
- Detailed introduction of OSPF header message
猜你喜欢

UE 虚幻引擎,项目结构

LeetCode之單詞搜索(回溯法求解)
![[paper notes] multi goal reinforcement learning: challenging robotics environments and request for research](/img/17/db8614b177f33ee4f67b7d65a8430f.png)
[paper notes] multi goal reinforcement learning: challenging robotics environments and request for research

Understand encodefloatrgba and decodefloatrgba

Unity3d learning notes

【Leetcode】1352. 最后 K 个数的乘积

AutoCAD - graphic input and output

AutoCAD - command repetition, undo and redo

Embedded database development programming (zero)

3dsmax scanning function point connection drawing connection line
随机推荐
MD5 bypass
[leetcode] integer inversion [7]
Embedded database development programming (V) -- DQL
China needle coke industry development research and investment value report (2022 Edition)
Simple HelloWorld color change
3dsmax scanning function point connection drawing connection line
Generate filled text and pictures
2021-10-29
C4D simple cloth (version above R21)
Lua wechat avatar URL
中国针状焦行业发展研究与投资价值报告(2022版)
Pdf to DWG in CAD
Download and use of font icons
Unity check whether the two objects have obstacles by ray
Redis has four methods for checking big keys, which are necessary for optimization
JVM call not used once in ten years
Basic knowledge points
2020-10-27
Simple modal box
嵌入式数据库开发编程(零)