排序之希尔排序


void ShellSort(int* a, int n) {
	int gap = n;
	while (gap > 1) {
		gap = gap / 3 + 1;/*排序元素的间隔
        只不过间隔不断变小*/
		for (int i = 0; i < n - gap; i++) {
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0) {//插入排序,不过是对间隔为gap的几个元素进行插入排序
				if (a[end] > tmp) {
					a[end + gap] = a[end];
					end -= gap;
				}
				else {
					break;
				}
			}/*遇到一个大于tmp的元素,
            或者是end<0的时候(因为有时候该元素已经是正确的位置)*/
			a[end + gap] = tmp;
	  }
	}
}

文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录