把数据结构书上的希尔排序算法实现了一下,通过向量来实现 #include "stdafx.h" #include <iostream> #include<fstream> #include <vector> #include<algorithm> #include <stack> #include <cmath> #include<string> using namespace std; void ShellInsert(vector<int> &v,int dk) { /**对数组做一趟希尔插入排序,本算法是和一趟直接插入排序相比,作了如下修改 * 1.前后记录位置的增量是dk,而不是1 * 2.v[0]只是暂存单元,不是哨兵。当j<=0时候插入位置已找到 */ for(int i=dk+1;i<v.size();++i) if(v[i]<v[i-dk]) { v[0]=v[i]; //暂存在v[0] int j; for(j=i-dk;j>0&&v[0]<v[j];j-=dk) v[j+dk]=v[j]; //记录后移,查找插入位置 v[j+dk]=v[0]; //插入 } } void ShellSort(vector<int> &v, int dlta[], int t) {//按增量序列dlta[0...t-1]对数组进行希尔排序 for(int i=0;i<t;++i) ShellInsert(v,dlta[i]) ;// 一趟增量为dlta[i]的插入排序 } int _tmain(int argc, _TCHAR* argv[]) { ifstream cin("d://1.txt"); int dlta[3]={5,3,1}; vector<int>vec; int temp; vec.push_back(0); while(cin>>temp) vec.push_back(temp); cout<<"Before Shell Sort: "; for(vector<int>::size_type i=1;i!=vec.size();i++) cout<<vec[i]<<" "; cout<<endl; ShellSort(vec,dlta,3); cout<<"After Shell Sort: "; for(vector<int>::size_type i=1;i!=vec.size();i++) cout<<vec[i]<<" "; cout<<endl; system("pause"); return 0; }