//==========================由于无法解决子序列的长度问题所以算法不正确,关键: 在子函数中求数组的长度 #include "iostream" using namespace std; //---------------插入排序------------------------- template<typename elemtype> void shellSort(elemtype *array,int* dlta,int dltaLength,int arrayLength) { elemtype t; int dk; for(int l=0;l<dltaLength;l++) { dk= dlta[l]; for(int k =0; k<dk; k++) //------对每个子序列进行插入排序 for (int i =k+dk ; i<子序列的长; i+=dk) { if (array[i] <array[i-dk])// -------假如后者小于前者,需要移动 { t = array[i]; //-----------用直接插入法查找插入位置,并移动元素,最后插入元素 for (int j=i-dk;j>=0 && t < array[j];j-=dk) array[j+dk] = array[j];//----------记录后移 array[j]=t;//---------------插入 } } } } void main() { int array[10] ={ 2,3,4,8,7,4,5,2,6,8}; int dlta[3]={5,3,1}; int i=0; cout<<"before shell sort:"<<endl; for(i=0;i<10;i++) cout<<cout.width(4)<<array[i]; cout<<endl; shellSort(array, dlta, 3, 10); cout<<"after shell sort :"<<endl; for(i=0;i<10;i++) cout<<cout.width(4)<<array[i]; cout<<endl; }