c语言排序(持续更新)

因为作者正在持续学习,所以该博客将会持续更新

  1. 桶序法
  2. 冒泡法
  3. 简单排序法
  4. 直接插入法
  5. 希尔排序法

桶序法
这里写图片描述

#include <stdio.h>
#define N 11
int main(void)
{
    int a[11]={1,4,3,6,1,8,9,10,22,33,12};
    int b[101]={0};//数组b全部初始化为0 
    for (int i=0;i<N;i++){
        b[a[i]]++;
    }
    for (int j=0;j<101;j++){
        while(b[j]!=0){
            printf("%d\t",j);
            --b[j];
        }
    }
    getchar();

}

冒泡法
这里写图片描述

#include <stdio.h>
#define N 11
int main(void)
{
    int i,j;
    int a[11]={0,4,3,6,1,8,9,10,22,33,12};
    //第一个作为一个交换介质 
    for (i=1;i<N;i++){
        for (j=i;j<N;j++){
            if (a[i]>a[j])
                a[i]=a[i]+a[j]-(a[j]=a[i]); 
        }
    }
    for (int i=1;i<N;i++){
        printf("%d\t",a[i]);
    }
    getchar();

}

简单排序
这里写图片描述

#include <stdio.h>
#define N 11
int main(void)
{
    int i,j;
    int temp;
    int a[11]={0,4,3,6,1,8,9,10,22,33,12};
    //第一个作为一个交换介质 
    for (i=1;i<N;i++){
        a[0]=a[i];
        for (j=i+1;j<N;j++){
            if (a[0]<a[j]){
                a[0] = a[j];
                temp = j;
            }
        }
        if(a[i] != a[0] )
            a[i] = a[temp] + a[i]-(a[temp] = a[i]); 
    }
    for (int i=1;i<N;i++)
        printf("%d\t",a[i]);
    getchar();
}

直接插入排序法
这里写图片描述

#include <stdio.h>
#define N 11
int main(void)
{
    int i,j;
    int a[11]={0,4,3,6,1,8,9,10,22,33,12};
    for (i=2;i<N;i++){
        if( a[i] > a[i-1])  
        {
            a[0] = a[i];
            for (j = i-1;a[j]<a[0];j--)
                a[j+1] = a[j];//后移 
            a[j+1] = a[0];
        }
    }
    for (int i=1;i<N;i++)
        printf("%d\t",a[i]);
    getchar();
}
希尔排序法

这里写图片描述

#include <stdio.h>
#define N 11
int main(void)
{
    int i,j;
    int d,x; 
    int a[11]={0,4,3,6,1,8,9,10,22,33,12};

    d = N/2;                        //计算第一次的增量 
    while(d>=1){
        for ( i = d; i < N; i++){
            x = a[i];               //获取序列中的写一个数据 
            j = i-d;                //序列中前一个数据的序号 
            while(j>0 && a[j]>x){   //下一个数大于前一个数 
                a[j+d] = a[j];      //将后一个数向前移动 
                j -= d;             //修改序号,继续向前比较 
            }
            a[j+d] = x;             //保存数据 


        }
        d /= 2;                     //缩小增量  
    }
    for ( i =0; i<N; i++)
            printf("%d\t",a[i]);    
    getchar();
}

希尔排序(自己理解之后写的)

#include <stdio.h>
#define N 11
int main(void)
{
    int i,j;
    int d,x; 
    int a[N]={11,33,29,6,1,8,9,10,22,3,12};

    d = N/2;
    while(d>=1){
        for (i = 0; i<= d;i++){
            for (x = 0;x<N-d;x++)
                if(a[x]>a[x+d])
                    a[x] = a[x]+a[x+d]-(a[x+d]=a[x]);
        }
        d /=2;
    }
    for ( i =0; i<N; i++)
            printf("%d\t",a[i]);    
    getchar();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值