当前位置:网站首页>Rainbow sorting | Dutch flag problem
Rainbow sorting | Dutch flag problem
2020-11-09 12:28:00 【Yard farmland】
WeChat search 「 Yard farmland, Xiao Qi 」, Focus on this program in New York , reply 「01-05」 You can get a selection of computer books 、 Personal writing notes 、 Big factory surface 、 Interview materials and other resources , mua ~
The Dutch flag problem is also called tricolor order , Or rainbow sort ,
Because the Dutch flag has three colors , The problem with this question is to give you three colors , Arrange in the given order .
Yes, of course , There are various ways to ask questions , Some give numbers , Some give letters , But the essence is the same .
For example, give you an array of three numbers :312312312231111122113,
The requirements are as follows 1 2 3 Put it in order , namely : 111111111222222222223333333333
( Please don't really count , You lose when you get serious )
Or use our classic 「 Baffle method 」.
In the express line , We used two baffles to divide the array into three areas :
<= pivot; Unordered range ;> pivot
So here's three baffles , Divided into four areas :
1, 2, 3, Unordered range
Partition
say concretely , use i, j, k These three hands are divided :
[0, i): save 1
[i, j): save 2
(k, array.length-1]: save 3
here j Put it to the left and right of unsorted intervals , But basically we put it on the left , So we don't have to “ new in order to be different ”.
initialization :
i = 0;
j = 0;
k = array.length - 1;
In this way, we can guarantee 1,2,3 Each interval of is empty .
We go through Watch the pointer j Pointing elements To keep narrowing the unsorted range , Until it's empty .
Example :1232312
To look good , The ordered elements we use RGB Three primary colors to mark .
Step1.
The pointer j Point to 1, and 1 Should be placed in [0, i) Within the interval , The pointer should be put here i And a pointer j Exchange the elements , And the two hands go forward .
Although at this point it doesn't make any difference whether it's a swap or not , But if i and j There are elements in between , There's a difference , such as Step7.
Step2.
The pointer j Point to 2, and 2 Should be placed in [i, j) Within the interval , therefore j++.
Step3.
The pointer j Point to 3, and 3 Should be placed in
(k, array.length-1] Within the interval , So here
j and k Point to the element exchange , also k--.
Notice that you can't j-- 了 , Because I haven't seen the new elements yet , I don't know what it is .
Step4.
The pointer j Point to 2, Same as Step2, Move the pointer directly j that will do .
Step5.
Keep moving the pointer j.
Step6.
Same as Step3.
Step7.
This step is obvious ,
because 1 Should be placed in [0,i) Section , So here's the pointer i,j Exchange the elements you point to , also i++, j++.
So the unsorted interval is empty , We're in line ~
Time complexity
This algorithm bottle neck That's it while loop In the , Every cycle is O(1), The total is O(n).
Spatial complexity
O(1)
If you like this article , Remember to leave me a like message ~ Your support and recognition , It's the biggest driving force of my creation , See you in the next article !
This is Qi , New York program , Lifelong learners , Every night 9 spot , Let's meet you in the cloud study room !
See my... For more dry articles Github: https://github.com/xiaoqi6666/NYCSDE
版权声明
本文为[Yard farmland]所创,转载请带上原文链接,感谢
边栏推荐
- 分库分表的 9种分布式主键ID 生成方案,挺全乎的
- 【分布式】分布式锁都有哪些实现方案?
- Glsb involves load balancing algorithm
- Show profile analysis of SQL statement performance overhead
- 【golang】GC详解
- JVM learning (4) - garbage collector and memory allocation
- Well, these four ways to query the maximum value of sliding window are good
- Four steps of Android integrated payment
- Tutorial system unity online course double 11 preferential registration is in progress
- SQL Chapter 2 Chapter 3
猜你喜欢
Understanding data structures starts with this article~
How to ensure that messages are not consumed repeatedly? (how to ensure the idempotent of message consumption)
Show profile analysis of SQL statement performance overhead
分库分表的 9种分布式主键ID 生成方案,挺全乎的
JVM学习(四)-垃圾回收器和内存分配
New features of Fedora 33 workstation
Four steps of Android integrated payment
JVM学习(六)-内存模型和线程
Tutorial system unity online course double 11 preferential registration is in progress
Fedora 33 Workstation 的新功能
随机推荐
PAT_甲级_1074 Reversing Linked List
Analysis of the source code of ThinkPHP facade
Safety (miscellany)
Reduce of Flink
接口测试如何在post请求中传递文件
Use treeview tree menu bar (recursively call database to create menu automatically)
为wget命令设置代理
The third way to realize webrtc in embedded devices
Interview summary on November 7, 2020 (interview 12K)
Implement crud operation
10款必装软件,让Windows使用效率飞起!
Suning's practice of large scale alarm convergence and root cause location based on Knowledge Map
Interface tests how to pass files in post requests
inet_ Pton () and INET_ Detailed explanation of ntop() function
手写Koa.js源码
Android studio import customized framework classess.jar As 4.0.1 version is valid for pro test
Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown
Visit Jingdong | members of Youth Innovation Alliance of China Academy of space technology visit Jingdong headquarters
如何用函数框架快速开发大型 Web 应用 | 实战
使用TreeView树型菜单栏(递归调用数据库自动创建菜单)