shell排序···快期末了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int a[100001];
int n;
void shell(int *p,int s,int e)
{
    int d=(e-s+1)/2;
    while(d)
    {
        for(int i=s;i<s+d;++i)
        {
            for(int j=i;j<=e;j+=d)
            {
                int *ma=&p[j];
             for(int k=j+d;k<=e;k+=d)
                if(p[k]<*ma) ma=&p[k];
                int t=p[j];
                p[j]=*ma;
                *ma=t;
            }
        }
        d=d/2;
    }
}
int main()
{
  cin>>n;
  for(int i=1;i<=n;++i)
  a[i]=rand();
  shell(a,1,n);
  for(int i=1;i<=n;++i)
  printf("%d ",a[i]);
  puts("");
    return 0;
}

你可能感兴趣的:(shell排序···快期末了)