希尔排序

#include <iostream>
#include <cmath>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[n+5];
    for(int i = 0;i<n;i++){
        cin>>a[i];
    }
    for(double i = n;i>1;){
        i=round(i/2);
        for(int j=0;j+i<n;j++){
            if(a[j]>a[j+(int)i]){
                swap(a[j],a[j+(int)i]);
            }
        }
    }
    for(int i = 0;i<n;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}

基本思想:

将i设为输入序列的项数,每次除以2(i为差值)(double类型四舍五入)。

每次将j=0,将序列的第j项与序列的第j+i比较进行交换,直到i为1。

posted @ 2024-04-20 09:25  王一行(小号)  阅读(4)  评论(0编辑  收藏  举报