希尔排序
来源:互联网 发布:淘宝超级店长使用教程 编辑:程序博客网 时间:2024/05/29 17:36
希尔排序,又称作”缩小增量法排序“,思路是不断把待排序的数组记录按间隔值(然后按下标)分成若干个小组,然后对同一个小组进行排序。设间隔值d(j-i=d)(此处数据存储在下标从1开始的数组中,容易理解。)
思路如下图:
代码如下:
#include <iostream>#include <algorithm>#include <stdio.h>const int maxn = 1000+10;int arr[maxn];using namespace std;void ShellSort(int arr[], int n){ int d=n,flag; while(d>=1){ d=d/2; flag=0; while(!flag){ flag = 1; for(int i=1; i<=n-d; i++){ int j=i+d; if(arr[i]>arr[j]){ swap(arr[i],arr[j]); flag = 0; } } } }}int main(){ int n; while(cin>>n){ for(int i=1; i<=n; i++) cin>>arr[i]; ShellSort(arr, n); for(int i=1; i<=n; i++) cout<<arr[i]<<" "; cout<<endl; } return 0;}
d的值大于等于1,小于等于n/2,每次取上一次的一半。
i<=n-d 和 j=i+d保证了数组没有中断,且没有越界
while(!flag)这一层循环是为了保证每个d间隔下,所排列的数都满足要求,即每d个间隔的数左边的小于右边。这样在d=2的时候(即两个数中间有一个数)就能把数按顺序排好,(d=1已经不需要考虑了吗?)
如有不对欢迎指出。
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- wholeContainer.setMinimumHeight(wholeContainerHeight + buttonsContainerHeight);
- 【简单DP】矩阵取数问题
- Retrofit2.0使用详解
- Mysql常见的错误
- 深入理解Java回调函数
- 希尔排序
- IntentService的简单用法
- asp 后台获取 input 的值
- Dubbo基本原理机制
- 由二叉树的先序和中序结果求取后序结果
- dubbo协议下的单一长连接与多线程并发如何协同工作
- Maven项目管理
- J2EE+Tomcat环境配置
- Python3使用requests模块显示下载进度