/* * ShellSort.cpp * * Created on: 2013-6-1 * Author: jue */ #include <iostream> using std::cout; using std::endl; void swap(int &a,int &b) { int temp = a; a = b; b = temp; } void shellSort(int datas[],int length) { int offset = length/2+1; while(offset >= 1) { for(int i = 0; i< offset; i++) { int *s = &datas[i]; int index = i; while(index + offset < length) { if(datas[index] <= datas[index + offset]) { index += offset; continue; } int *p1 = &datas[index]; while(p1 >= s) { if(*p1 <= *(p1+offset)) { break; } swap(*p1,*(p1+offset)); p1 -= offset; } index+=offset; } } offset/=2; } } void display(int datas[], int length) { for(int i = 0; i < length; i ++) { cout<<" "<<datas[i]; } cout<<endl; } int main(void) { int datas[] = {1,22,8,3,2,5,6,9,0}; shellSort(datas,9); display(datas,9); return 0; }