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

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

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() - */

参考链接:

相关文章
|
1月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
20 1
|
1月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
17 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
5月前
|
算法 搜索推荐
数据结构算法--6 希尔排序和计数排序
**希尔排序**是插入排序的改进版,通过分组插入来提高效率。它逐步减少元素间的间隔(增量序列),每次对每个间隔内的元素进行插入排序,最终增量为1时进行最后一次直接插入排序,实现整体接近有序到完全有序的过程。例如,对数组`5, 7, 4, 6, 3, 1, 2, 9, 8`,先以间隔`d=4`排序,然后`d=2`,最后`d=1`,完成排序。计数排序则适用于0到100的数值,通过统计每个数出现次数,创建对应计数数组,再根据计数重建有序数组,时间复杂度为`O(n)`。
|
1月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
4月前
|
算法 搜索推荐 C#
|
5月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
4月前
|
算法 搜索推荐 Shell
|
5月前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:直接插入排序和希尔排序
【C/排序算法】:直接插入排序和希尔排序
45 0
|
5月前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
43 0
|
5月前
|
搜索推荐
排序算法---希尔排序---详解&&代码
排序算法---希尔排序---详解&&代码