#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();
}