现有待排序序列{25,84,21,47,15,27,68,35,20},请写出利用希尔排序进行排序的过程。
时间: 2024-05-27 12:08:12 浏览: 12
希尔排序是一种改进的插入排序,相比于插入排序具有更高的效率。它的基本思想是将待排记录按下标的一定增量分组,对每组使用直接插入排序算法进行排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰被分成一组,算法便终止。
以{25,84,21,47,15,27,68,35,20}为例,假设我们采用增量序列为{4,2,1},则初始时,整个序列被分成了4组,每组分别为{25,15,68},{84,27,35},{21,68,20},{47}。然后对每组进行插入排序,得到:
{15,25,68},{27,35,84},{20,21,68},{47}
此时,增量变为2,将序列分成了两组,每组分别为{15,27,20,47}和{25,35,84,21,68}。再对每组进行插入排序,得到:
{15,20,27,47},{21,25,35,68,84}
最后,增量变为1,整个序列只有一组,对其进行插入排序即可,最终得到的有序序列为{15,20,21,25,27,35,47,68,84}。
相关问题
现有待排序序列{25,84,21,47,15,27,68,35,20},请写出利用归并排序进行排序的过程。
归并排序是一种分治思想的排序算法,其基本思路是将待排序序列分成若干个子序列,对每个子序列进行排序,然后再将已排序的子序列合并成更大的有序序列,直到整个序列有序为止。
下面是利用归并排序对给定序列进行排序的过程:
1. 将待排序序列分成左右两部分,分别为{25,84,21,47}和{15,27,68,35,20}。
2. 对左右两部分分别进行归并排序,得到排好序的左右两个子序列:
- 对左半部分{25,84,21,47}进行排序:
1. 将左半部分继续拆分为两个子序列{25,84}和{21,47},分别进行排序。
2. 对左子序列{25,84}进行排序,得到{25,84}。
3. 对右子序列{21,47}进行排序,得到{21,47}。
4. 将排好序的左右子序列合并成{25,21,47,84}。
- 对右半部分{15,27,68,35,20}进行排序:
1. 将右半部分继续拆分为两个子序列{15,27,68}和{35,20},分别进行排序。
2. 对左子序列{15,27,68}进行排序,得到{15,27,68}。
3. 对右子序列{35,20}进行排序,得到{20,35}。
4. 将排好序的左右子序列合并成{15,20,27,35,68}。
3. 将排好序的左右两个子序列{25,21,47,84}和{15,20,27,35,68}合并成一个有序序列{15,20,21,25,27,35,47,68,84}。
因此,利用归并排序对给定序列进行排序后,得到的有序序列为{15,20,21,25,27,35,47,68,84}。
现有待排序序列{25,84,21,47,15,27,68,35,20},请写出利用堆排序进行排序的过程。
堆排序的基本思想是将待排序序列构建成一个大根堆或小根堆,然后依次取出堆顶元素并重新调整堆,最终得到有序序列。
下面是利用堆排序进行排序的过程:
1. 构建大根堆
将待排序序列构建成大根堆,即每个节点的值都大于其左右子节点的值。从最后一个非叶子节点开始,依次向前调整,保证每个节点都满足堆的性质。
调整前:{25,84,21,47,15,27,68,35,20}
首先从最后一个非叶子节点68开始,调整以68为根节点的子树:
68
/ \
35 27
/ \ / \
25 21 47 15
/ \
84 20
调整后:
68
/ \
35 47
/ \ / \
25 21 27 15
/ \
84 20
再调整以35为根节点的子树:
68
/ \
47 35
/ \ / \
25 21 27 15
/ \
84 20
再调整以25为根节点的子树:
68
/ \
47 35
/ \ / \
84 21 27 15
/ \
25 20
再调整以47为根节点的子树:
84
/ \
47 35
/ \ / \
68 21 27 15
/ \
25 20
调整前半部分结束,继续调整后半部分:
84
/ \
68 35
/ \ / \
47 21 27 15
/ \
25 20
最终得到大根堆:{84,68,35,47,21,27,25,15,20}
2. 排序
取出堆顶元素84,将其放到有序序列的末尾,然后重新调整堆,得到新的大根堆{68,47,35,25,21,27,20,15}。
重复上述过程,直到堆为空。
排序过程:
第一次取出堆顶元素84,得到新的大根堆{68,47,35,25,21,27,20,15},有序序列为{84}。
第二次取出堆顶元素68,得到新的大根堆{47,35,27,25,21,20,15},有序序列为{84,68}。
第三次取出堆顶元素47,得到新的大根堆{35,25,27,15,21,20},有序序列为{84,68,47}。
第四次取出堆顶元素35,得到新的大根堆{27,25,20,15,21},有序序列为{84,68,47,35}。
第五次取出堆顶元素27,得到新的大根堆{25,21,20,15},有序序列为{84,68,47,35,27}。
第六次取出堆顶元素25,得到新的大根堆{21,15,20},有序序列为{84,68,47,35,27,25}。
第七次取出堆顶元素21,得到新的大根堆{20,15},有序序列为{84,68,47,35,27,25,21}。
第八次取出堆顶元素20,得到新的大根堆{15},有序序列为{84,68,47,35,27,25,21,20}。
第九次取出堆顶元素15,得到新的大根堆{},有序序列为{84,68,47,35,27,25,21,20,15}。
最终得到有序序列:{15,20,21,25,27,35,47,68,84}。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)