基本排序方法之希尔排序

/*
 * main.c
 *  希尔排序
 *  Created on: Nov 7, 2010
 *      Author: jenson
 */
typedef int item;
#define key(A)(A)
#define less(A,B)(key(A)<= key(B))/*比较大小*/
#define swap(A,B){item t = A;A = B;B = t;}/*交�Q*/
#define compexch(A,B) {if(less(A,B))swap(A,B)}/*比较大小并交换*/

void shell_sort(item a[], int l, int r) {
    int i, j, h;
    for (h = 1; h <= (r - l) / 9; h = 3 * h + 1)
        ;
    for (; h > 0; h /= 3) {
        for (i = l + h; i <= r; i++) {
            int j = i;
            item v = a[i];
            while (j >= l + h && less(v,a[j-h])) {
                a[j] = a[j - h];
                j -= h;
            }
            a[j] = v;
        }
    }
}

int main() {
    item a[7] = { 0, -10, 8, -9, 4, 7, 2 };
    shell_sort(a, 0, 6);
    int i = 0;
    for (i = 0; i < 7; i++) {
        printf("%d\t", a[i]);
    }
    return 0;
}

你可能感兴趣的:(算法,职场,休闲)