当前位置:网站首页>Insert sort and Hill sort
Insert sort and Hill sort
2022-07-06 22:05:00 【Hou Jiashu】
Insertion sort
Insert an element into the sorted array
You can think of the first element of an unordered array as An ordered array with only one element
Then insert the elements in the array one by one into the appropriate position in the ordered array
When all elements are inserted into an ordered array , This array has been set to order
Dynamic diagram demonstration
The code logic is as follows :
Take ascending order
Pass the inserted element through tmp preservation
hypothesis At this time, there are i+1 Elements
The last element of the ordered array ( Largest element ) The subscript , Write it down as end
adopt end Traversal array , Find out the appropriate position for element insertion
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end + 1] = tmp;
take tmp And a[end] Compare ,
When a[end] > tmp when , take a[end] Move back one position , after end--
Then with tmp Compare , Until you find the right place
Two cases of suitable location
1. tmp > end
2.tmp Less than all elements in the array
When you find the right place , The cycle ends , Store the data in the right place (end + 1)
This is the step of inserting an element into an ordered array
Yes n Inserting and sorting an array of elements can be understood as
Insert... Into an ordered array containing one element n-1 Elements
When converted into code, it is
// Insertion sort
void InsertSort(int* a, int n)
{
int i = 0;
for(i=0;i<n-1;i++)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
a[end + 1] = tmp;
}
}
The time complexity is O(N^2)
Shell Sort
Hill sort is an advanced sort of insert sort , Greatly optimize the efficiency of the insertion sort algorithm
Basic idea and code analysis implementation
Suppose the array has N Elements
Take one less than N The positive integer gap
Set the distance in the array to gap The elements of are divided into a group
Be careful : The elements between the groups do not coincide , When taking elements , The first group is marked below 0 The element of is the first element
The second type is marked as 1 The element of is the second element
......
Insert and sort each group of elements
int j = 0;
// Sort each group of elements
for (j = 0; j < gap; j++)
{
int i = 0;
// Sort a set of elements
for (i = j; i < n - gap; i += gap)
{
int end = i;
int tmp = a[end + gap];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = tmp;
}
}
After the gap Reduce and repeat the above steps
Take ascending order as an example
When gap > 1 when
This process is called pre sorting , In order to facilitate better and faster insertion sorting
gap The bigger it is , Large elements will reach the rear faster , Small elements move faster to the front
gap The smaller it is , The closer the data is to order
When gap == 1 when
Sort for insertion
in summary
void ShellSort(int* a, int n)
{
// according to gap Do the nesting
int gap = n;
while (gap > 1)
{
gap = gap / 3 + 1;
int j = 0;
for (j = 0; j < gap; j++)
{
int i = j;
for (i = 0; i < n - gap; i += gap)
{
int end = i;
int tmp = a[end + gap];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = tmp;
}
}
}
}
边栏推荐
- Shell product written examination related
- Wechat red envelope cover applet source code - background independent version - source code with evaluation points function
- Powerful domestic API management tool
- 嵌入式常用计算神器EXCEL,欢迎各位推荐技巧,以保持文档持续更新,为其他人提供便利
- Leetcode learning records (starting from the novice village, you can't kill out of the novice Village) ---1
- Adjustable DC power supply based on LM317
- What is the RDD operator in spark
- Persistence / caching of RDD in spark
- GPS从入门到放弃(十一)、差分GPS
- Checkpoint of RDD in spark
猜你喜欢
Why rdd/dataset is needed in spark
Vit paper details
Happy sound 2[sing.2]
嵌入式常用计算神器EXCEL,欢迎各位推荐技巧,以保持文档持续更新,为其他人提供便利
Leetcode learning records (starting from the novice village, you can't kill out of the novice Village) ---1
GPS从入门到放弃(十二)、 多普勒定速
C how to set two columns comboboxcolumn in DataGridView to bind a secondary linkage effect of cascading events
Broadcast variables and accumulators in spark
What can one line of code do?
Uni app app half screen continuous code scanning
随机推荐
BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
GPS from entry to abandonment (XVII), tropospheric delay
NPM run dev start project error document is not defined
Explain ESM module and commonjs module in simple terms
Wechat red envelope cover applet source code - background independent version - source code with evaluation points function
Univariate cubic equation - relationship between root and coefficient
1D convolution detail
What is the difference between animators and animators- What is the difference between an Animator and an Animation?
GPS从入门到放弃(十一)、差分GPS
Checkpoint of RDD in spark
[10:00 public class]: basis and practice of video quality evaluation
Happy sound 2[sing.2]
Unity3D学习笔记6——GPU实例化(1)
Reptile practice (V): climbing watercress top250
1292_FreeROS中vTaskResume()以及xTaskResumeFromISR()的实现分析
GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
ViT论文详解
zabbix 代理服务器 与 zabbix-snmp 监控
Powerful domestic API management tool