排序集锦(rough)

//sorts(排序conclusion) 
#include <stdio.h>
#include <stdlib.h> 
#include <time.h>
/*选择排序 
(优化:每次与pos位置上的数比较,pos记录最大数的位置,最后交换位置) 
int main()
{
    int a[100],n,i,j,x;
    scanf("%d",&n);
    for (i=0;i<n;i++)
        scanf("%d",&a[i]);
    for (i=0;i<n-1;i++)
    {
        for (j=i;j<n;j++)
        {
            if (a[i]<a[j])
            {
                x=a[i];
                a[i]=a[j];
                a[j]=x;
            }
        }
    }
    for (i=0;i<n;i++)
        printf("%4d",a[i]);
    printf("\n"); 
    return 0;
}*/ 
/*冒泡排序 
(优化:用flag标记每轮变化,如果无变化则说明已经按顺序排列,无需继续进行) 
int main()
{
    int a[100],n,i,j,x;
    scanf("%d",&n);
    for (i=0;i<n;i++)
        scanf("%d",&a[i]);
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-i;j++)
        {
            if (a[j]<a[j+1])
            {
                x=a[j];
                a[j]=a[j+1];
                a[j+1]=x;
            }
        }
    }
    for (i=0;i<n;i++)
        printf("%4d",a[i]);
    printf("\n"); 
    return 0;
}*/
//*希尔排序(冒泡排序升级版) 
int main()
{
    int a[100]={0};
    int n,i,step,flag,x,t;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    step=n/2;
    flag=0;
    t=1;
    while (step>0)
    {
          if(!flag)
        {
            flag=1;
            for(i=t;i<=n-step;i+=step)
            {
                if(a[i]>a[i+step])
                {
                     x=a[i];
                     a[i]=a[i+step];
                     a[i+step]=x;
                     flag=0;
                }
            }
        }
        else
        {
            flag=0;
            t++;
            if (t==step+1)
            {
                t=1;
                step=step/2;
            }
        }
    }
    for(i=1;i<=n;i++)
        printf("%4d",a[i]);
    printf("\n");
}
/*插入排序 
int main()
{
    int a[100]={0};
    int n,i,t,temp;
    scanf("%d",&n);
    for (i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for (i=2;i<n;i++)
    {
        t=i-1;
        temp=a[i];
        a[0]=temp;
        while (temp<a[t])
        {
            a[t+1]=a[t];
            t--;
        }
        a[t+1]=temp;
    }
    for (i=1;i<=n;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
} */
/*快排
int n,a[100];
void sort(int left,int right)
{
    int i,j,temp,x,t;
    if (left>right)
        return;
    i=left;
    j=right;
    srand(time(0));
    t=left+rand()%(right-left+1);
    temp=a[t];
    a[t]=a[left];
    while(i<j)
    {
        while(a[j]>=temp&&i<j)
        j--;
        while(a[i]<=temp&&i<j)
        i++;
        if (i<j)
        {
            x=a[i];
            a[i]=a[j];
            a[j]=x;
        }
    }
    a[left]=a[i];
    a[i]=temp;
    sort(left,i-1);
    sort(i+1,right); 
}

int main()
{
    int i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
       scanf("%d",&a[i]);
    sort(0,n-1); 
    for (i=0;i<n;i++)
       printf("%4d",a[i]);
    printf("\n");
    return 0;
}*/ 

 

posted @ 2017-01-18 13:38  lovely_dzh  阅读(127)  评论(0编辑  收藏  举报