当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Stack & queue (go) of data structure and algorithm series
- Android架构之Navigation组件(二)
- iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法 20200105
- 苏宁基于知识图谱的大规模告警收敛和根因定位实践
- SQL statement to achieve the number of daffodils
- An attempt to read or write to protected memory occurred using the CopyMemory API. This usually indicates that other memory is corrupted.
- Android studio import customized framework classess.jar As 4.0.1 version is valid for pro test
- 外贸自建网站域名的选择— Namesilo 域名购买
- TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
- Detailed explanation of [golang] GC
猜你喜欢

Complete set of linked list operations of data structure and algorithm series (3) (go)

多线程真的比单线程快?

Looking for better dynamic getter and setter solutions

Solve the problem of idea shortcut key Alt + insert invalid

Windows must be installed with efficiency software!

“开源软件供应链点亮计划 - 暑期 2020”公布结果 基于 ChubaoFS 开发的项目获得最佳质量奖

Learning notes of nodejs

Handwriting Koa.js Source code

Vscode plug-in configuration pointing North

手写Koa.js源码
随机推荐
A simple way to realize terminal text paste board
Implement crud operation
inet_pton()和inet_ntop()函数详解
El table dynamic header
10款必装软件,让Windows使用效率飞起!
Interface tests how to pass files in post requests
手写Koa.js源码
嗯,查询滑动窗口最大值的这4种方法不错...
The history of C1 research in Shenzhen
Looking for better dynamic getter and setter solutions
For and for... In, for each and map and for of
On the calculation of non interaction polarizability
Well, the four ways to query the maximum value of sliding window are good
List of wechat video Number broadcasters October 2020
Understanding data structures starts with this article~
How to query by page after 10 billion level data is divided into tables?
Nine kinds of distributed primary key ID generation schemes of sub database and sub table are quite comprehensive
TiDB x 微众银行 | 耗时降低 58%,分布式架构助力实现普惠金融
彩虹排序 | 荷兰旗问题
A simple ability determines whether you will learn!