希尔排序思想: 分组 通过步长来分组 步长每次减小 最后1轮为1, 每组数字进行插入排序 稳定性:非稳定排序 复杂度:nlogn 算法实现: #include "stdafx.h" // 对每组进行插入排序 void GroupSort(int nData[], int nBegin, int nEnd, int nStep) { for(int i=nBegin; i<=nEnd-1; i=i+nStep) { for(int j=i; j>nBegin; j=j-nStep) { if(nData[j] < nData[j-nStep]) { int temp = nData[j]; nData[j] = nData[j-nStep]; nData[j-nStep] = temp; } } } } void ShellSort(int nData[], int nLen) { // 步长设为每次除以2 for(int nStep=nLen/2; nStep>=1; nStep/=2) { for(int i=0; i<nStep; i++) { GroupSort(nData, i, nLen, nLen); } } } int _tmain(int argc, _TCHAR* argv[]) { int pData[] = {2,5,3,1,4,8,7,9,6,0}; ShellSort(pData, 10); for(int i=0; i<10; i++) { printf("%d", pData[i]); } return 0; }