当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Windows must be installed with efficiency software!
- Recommended tools for Mac
- Adobe Experience Design /Xd 2020软件安装包(附安装教程)
- 零基础IM开发入门(四):什么是IM系统的消息时序一致性?
- 导师制Unity网课 双十一优惠报名进行中
- 050_ object-oriented
- Analysis of the source code of ThinkPHP facade
- JVM学习(四)-垃圾回收器和内存分配
- Kubernetes业务日志收集与监控
- Using rem, the font size changes when the screen zooms
猜你喜欢
嗯,查询滑动窗口最大值的这4种方法不错....
Windows must be installed with efficiency software!
Wechat circle
vscode 插件配置指北
Solve the problem of idea shortcut key Alt + insert invalid
Adobe Experience Design /Xd 2020软件安装包(附安装教程)
【golang】GC详解
In the future, China Telecom will make cloud computing service the main business of China Telecom
Using rem, the font size changes when the screen zooms
注意.NET Core进行请求转发问题
随机推荐
零基础IM开发入门(四):什么是IM系统的消息时序一致性?
Front end code style practice prettier + eslint + git hook + lint staged
Online course of tutorial system processing is in progress
Reading design patterns adapter patterns
医疗项目管理的三种实用技巧
Looking for better dynamic getter and setter solutions
JVM learning (4) - garbage collector and memory allocation
Aren't you curious about how the CPU performs tasks?
利用 Python 一键下载网易云音乐 10W+ 乐库
Understanding runloop in OC
Recommended tools for Mac
A simple ability determines whether you will learn!
JVM学习(五) -执行子系统
From coding, network transmission, architecture design, Tencent cloud high quality, high availability real-time audio and video technology practice
Handwriting Koa.js Source code
Interface tests how to pass files in post requests
Vscode plug-in configuration pointing North
What really drags you down is sunk costs
Source code analysis of ThinkPHP framework execution process
SEO见风使舵,是对还是错?