题解 | #争夺前五名#

争夺前五名

https://www.nowcoder.com/practice/cd052308a1c44a88ad00255f312c3e14

#include <iostream>
using namespace std;


void ShellSort(int* a, int n) {
    int gap = n;
    while (gap > 1) {
        gap = gap / 3 + 1; // log 3 N
        //每次排gap次
        for (int j = 0; j < n - gap; j++) {
            //插入排序
            int end = j;
            int tmp = a[end + gap];
            while (end >= 0) {
                if (tmp > a[end]) {
                    a[end + gap] = a[end];
                    end -= gap;
                } else {
                    break;
                }
            }
            a[end + gap] = tmp;
        }
    }
}
int main() {
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    // 排序
    ShellSort(arr, n);
    for (int i = 0; i < 5; i++) {
        cout << arr[i] << ' ';
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务