希尔排序

#include <iostream>

#include <cstdio>

#include <string.h>

#include <algorithm>



using namespace std;



void print(int v[], int n) {

    for(int i = 0; i < n; i++) {

        printf("%d  ", v[i]);

    }

    cout << endl;

}



void shell_sort(int v[], int n) {

    int gap, i, j;

    for(gap = n/2; gap > 0; gap /= 2) {//选择步长.

        for(i = gap; i < n; i++) {//从后向前一步步调整.

            for(j = i-gap; j>=0 && v[j]>v[j+gap]; j -= gap) {

                swap(v[j], v[j+gap]);

            }

        }

        print(v, n);//打印中间的每一步结果.

    }

}



int main() {

    int a[100], m;

    while(scanf("%d", &m) == 1) {

        for(int i = 0; i < m; i++) {

            scanf("%d", a+i);

        }

        shell_sort(a, m);

    }

    return 0;

}

/**

TEST:

10

3 5 0 1 7 9 4 8 2 6

**/

你可能感兴趣的:(希尔排序)