#include "stdafx.h" #include <iostream> static void print(int arrayOld[], int n) { for (int i = 0; i < n; i++) { if (i == n - 1) { std::cout << arrayOld[i] << std::endl; } else { std::cout << arrayOld[i] << ","; } } } static void swap(int array[], int i, int j) { array[i] ^= array[j]; array[j] ^= array[i]; array[i] ^= array[j]; } static void insertSortBySwap(int array[], int idxEnd, int gap) { while (idxEnd - gap >= 0 && array[idxEnd] < array[idxEnd - gap]) { swap(array, idxEnd, idxEnd - gap); idxEnd -= gap; } } static void insertSortByMove(int array[], int idxEnd, int gap) { int temp = array[idxEnd]; while (idxEnd - gap >= 0 && temp < array[idxEnd - gap]) { array[idxEnd] = array[idxEnd - gap]; idxEnd -= gap; } array[idxEnd] = temp; } static void shellSort(int array[], int n) { for (int gap = n >> 1; gap >= 1; gap = gap >> 1) { // gap for each group for (int idxEach = gap; idxEach < n; idxEach++) { // sort from insertSortByMove(array, idxEach, gap); } } } int _tmain(int argc, _TCHAR* argv[]) { int array[10] = { 8, 7, 9, 2, 5, 4, 1, 6, 0, 3 }; int n = sizeof(array) / sizeof(array[0]); print(array, n); shellSort(array, n); print(array, n); getchar(); }
原文:https://www.cnblogs.com/xinyueliu/p/12886003.html