希尔排序出错
程序代码:
//插入排序 void sort1(int a[], int n) { for(int i = 1; i != n; ++i) { //如果当前数字比相邻的数小 if(a[i] < a[i-1]) { int j; int temp = a[i]; for(j = i-1; temp < a[j]; --j) { //数字右移 a[j+1] = a[j]; } a[j+1] = temp; } } } //希尔排序 void ShellInsert(int a[], int n, int d) { for(int i = d; i != n; ++i) { ////如果当前数字比相邻的数小 if(a[i] < a[i-d]) { int j; int temp = a[i]; for(j = i-d; j >= 0 && temp < a[j]; j -= d) { //元素右移 a[j+d] = a[j]; } a[j+d] = temp; } } } void ShellSort(int a[], int n) { int d = n/2; while(d != 1) { //增量插入排序 ShellInsert(a, n, d); d = d/2; } } int _tmain(int argc, _TCHAR* argv[]) { int a[] = {7, 2, 5, 3, 6}; int n = sizeof(a)/sizeof(*a); ShellSort(a, n); for(int i = 0; i != n; ++i) { cout<<a[i]<<endl; } return 0; }
根据规则照着插入排序得出的代码,但排序结果不对,网上搜了下,貌似也差不多,求排错啊!