当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown
- Tidb x micro banking reduces time consumption by 58%, and distributed architecture helps to realize inclusive finance
- 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer
- 接口测试如何在post请求中传递文件
- 实现商品CRUD操作
- 配置交换机Trunk接口流量本地优先转发(集群/堆叠)
- A simple way to realize terminal text paste board
- Android架构之Navigation组件(二)
- 分库分表的 9种分布式主键ID 生成方案,挺全乎的
- SEO见风使舵,是对还是错?
猜你喜欢
随机推荐
inet_ Pton () and INET_ Detailed explanation of ntop() function
Ali, Tencent, Baidu, Netease, meituan Android interview experience sharing, got Baidu, Tencent offer
在嵌入式设备中实现webrtc的第三种方式③
使用TreeView树型菜单栏(递归调用数据库自动创建菜单)
移动安全加固助力 App 实现全面、有效的安全防护
Stack & queue (go) of data structure and algorithm series
A simple ability determines whether you will learn!
On the calculation of non interaction polarizability
Implement crud operation
导师制Unity网课 双十一优惠报名进行中
Aren't you curious about how the CPU performs tasks?
The use of Android studio Aidl
技美那么贵,不如找顾问 | AALab企业顾问业务
零基础IM开发入门(四):什么是IM系统的消息时序一致性?
Impact of libssl on CentOS login
Android NDK development and actual combat WeChat official account 2-D code detection
Download Netease cloud music 10W + music library with Python
配置交换机Trunk接口流量本地优先转发(集群/堆叠)
Handwriting Koa.js Source code
深圳C1考证历程