当前位置:网站首页>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;
}
}
}
}
边栏推荐
- GNN, please deepen your network layer~
- The role of applicationmaster in spark on Yan's cluster mode
- MariaDB database management system learning (I) installation diagram
- Bat script learning (I)
- Sparkshuffle process and Mr shuffle process
- Persistence / caching of RDD in spark
- [sciter bug] multi line hiding
- Kohana database
- Mongodb (III) - CRUD
- The underlying implementation of string
猜你喜欢
20 large visual screens that are highly praised by the boss, with source code templates!
GPS from getting started to giving up (XV), DCB differential code deviation
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
GPS从入门到放弃(十四)、电离层延时
Write a rotation verification code annotation gadget with aardio
Xiaoman network model & http1-http2 & browser cache
Digital transformation takes the lead to resume production and work, and online and offline full integration rebuilds business logic
GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
Shell product written examination related
make menuconfig出现recipe for target ‘menuconfig‘ failed错误
随机推荐
GPS from entry to abandonment (XIV), ionospheric delay
Reset Mikrotik Routeros using netinstall
GPS du début à l'abandon (XIII), surveillance autonome de l'intégrité du récepteur (raim)
GPS从入门到放弃(二十)、天线偏移
一行代码可以做些什么?
GPS from getting started to giving up (XI), differential GPS
Depth first traversal (DFS) and breadth first traversal (BFS)
C how to set two columns comboboxcolumn in DataGridView to bind a secondary linkage effect of cascading events
Oracle性能分析3:TKPROF简介
HDU 2008 digital statistics
Support multiple API versions in flask
make menuconfig出现recipe for target ‘menuconfig‘ failed错误
Kohana database
Why rdd/dataset is needed in spark
Reinforcement learning - learning notes 5 | alphago
How does the uni admin basic framework close the creation of super administrator entries?
Checkpoint of RDD in spark
Xiaoman network model & http1-http2 & browser cache
2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks
From campus to Tencent work for a year of those stumbles!