心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)

简介: 心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)

1, 直接插入法:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。由于碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

实现思路:

1,把第一个数看成有序序列,从数组第二个开始向后遍历,即i=1,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置;

2,当从第i个数向前遍历时,将a【i】保存在temp中,然后令j=i,首先temp与第(j-1)个数比较

(1)如果temp>a【j-1】,说明序列已经有序,i++进入下一个循环外;

(2)如果tempa【j-1】=6, 此时(i++)-->2

0

1

2

6

10

4

2,初始 i=2, temp=a【i】=4;

(1) 由于j=i=2, temp1

0

1

2

6

10

10

(2)j=1, temp0, a【j】=temp, 循环退出

0

1

2

4

6

10

代码实现:

void simple_insertSort(int array【】, int n)

{

int i, j, temp;

for(i=1; i

{

temp = array【i】;

for(j=i; j>0; j--)

{

if(temp < array【j-1】)

array【j】 = array【j-1】;

else

break;

}

array【j】 = temp;

}

}

2, 希尔排序法:将无序数组分割为若干个子序列,序列按照一定间隔(d)分成子序列,并对子序列进行插入排序;然后再选择一个更小的间隔(d=d/2),再将数组分割为多个子序列进行排序,最后选择增量为1,此时可以直接使用“直接插入排序”,使最终数组获得有序序列。

希尔排序法过程:

5  10  8  60  3  1  90  7

第一次分组:间隔为8/2=4

53

-10---1

8---90

-60---7

排序后:

3  1  8  7  5  10  90  60

第二次分组:间隔4/2=2

3--8--5---90

-1--7--1060

排序后:

3  1  5  7  8  10  90  60

第三次分组:间隔2/2=1,直接使用“直接插入法”

31578109060

排序后:

1  3  5  7  8  10  60  90  

实现代码:

/**

Description:

Input Args:

Output Args:

Return Value:

*/

int shell_sort (int s, int len)

{

int d;

int i,temp,j;

d = len / 2;

while(d > 0)

{

i = d;

while(i [span style="color: rgba(0, 0, 0, 1)"> len)

{

j = i;

while(j > 0)

{

if(s【j-d】 > s【j】)

{

temp = s【j-d】;

s【j-d】 = s【j】;

s【j】 = temp;

j = j-d;

}//代码效果参考:http://www.ezhiqi.com/bx/art_2619.html

else

break;

}

i++;

}

d = d / 2;

}

return 0;

}//代码效果参考:http://www.ezhiqi.com/bx/art_6677.html / - End of shell_sort() - */

参考链接:

相关文章
|
11天前
|
搜索推荐 算法 Shell
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
28 5
|
11天前
|
存储 搜索推荐 算法
排序(堆排序、快速排序、归并排序)-->深度剖析(二)
排序(堆排序、快速排序、归并排序)-->深度剖析(二)
22 6
|
2月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
2月前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
20 0
|
3月前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
|
3月前
|
算法 Java
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序...
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序
20 0
|
3月前
|
人工智能 搜索推荐 Shell
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
【排序算法】插入排序与希尔排序,你不想知道为什么希尔比插入更快吗?
|
10月前
直接插入,希尔排序,选择排序
直接插入,希尔排序,选择排序
|
3月前
|
搜索推荐 测试技术
排序算法-插入/希尔排序
排序算法-插入/希尔排序
15 0
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
209 0