排序算法之希尔排序
2013-03-24 20:39
281 查看
希尔排序的思想是根据步长d将排序的数组分成d组,a[0],a[0+d].....为一组,a[1],a[1+d]...为一组,把每组用插入排序进行排序,这时每个数都朝着最终位置的方向移动一大步。逐渐缩小d,直至d=1(最后一个步长必须为1),此时的排序为插入排序,但此时数组已经基本有序,因此插入排序较快。
算法复杂度与步长有关,已知最好的:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> test; int k; for (int i=0;i<10;i++) { cin>>k; test.push_back(k); } int length=test.size(); for(int k=test.size()/2;k>0;k=k/2) { shellsort(test,k); } for(vector<int>::iterator it=test.begin();it!=test.end();it++) { cout<<*it<<' '; } return 0; } void shellsort(vector<int> &v,int d) { //d为增量 for (int i=d;i<v.size();i++)//将v[d,d+1,....n]插入到当前有序序列 { if (v[i]<v[i-d]) { //寻找插入位置 int key=v[i],j=i-d; do{ v[j+d]=v[j]; j=j-d; }while (j>0&&v[j]>key); v[j+d]=key; } } }
相关文章推荐
- 算法笔记2-排序-希尔排序(最小增量排序)
- 插入排序算法---插入排序与希尔排序
- 【牛客网】直通bat-面试算法精品课_第2章 排序 2.8 希尔排序练习题(JAVA版)
- 经典算法排序——希尔排序
- 面试---算法排序(3)(希尔排序)
- 【算法拾遗(java描写叙述)】--- 插入排序(直接插入排序、希尔排序)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 【算法】希尔排序,快速排序,选择排序,插入排序,冒泡排序
- 【DS】排序算法之希尔排序(Shell Sort)
- Python排序搜索基本算法之希尔排序实例分析
- 算法(二)初等排序前篇[插入和希尔排序]
- 常见排序算法之希尔排序
- 算法 —— 选择排序,插入排序,希尔排序
- 直接插入排序与希尔排序的思想及算法实现
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 算法 2.1节 希尔排序、选择与插入排序的区别、排序的稳定性
- 算法导论 第2章 算法入门(直接插入排序、希尔排序、冒泡排序、合并排序)
- 算法——选择排序、插入排序和希尔排序(改进的插入排序)
- 算法——高级排序——快速排序,归并排序,希尔排序