排序算法(c语言描述)

本文介绍了两种经典的排序算法——冒泡排序和插入排序,并提供了使用C语言实现的完整代码。冒泡排序通过不断交换相邻元素实现排序,而插入排序则通过将元素插入到已排序部分的正确位置来完成排序。
摘要由CSDN通过智能技术生成

冒泡排序:

#include<stdio.h>

int main()

{

    int a[5],i;

    void bubblesort(int a[],int n);

    for(i=0;i<5;i++)

    scanf("%d",&a[i]);

    bubblesort(a,5);

    for(i=0;i<5;i++)

    printf("%d",a[i]);

    printf("/n");

    return 0;

}

void bubblesort(int a[],int n)

{

     int i,j,temp;

     for(i=0;i<n-1;i++)

     for(j=i+1;j<n;j++)

     {

                       if(a[i]>=a[j])

                       {

                                     temp=a[i];

                                     a[i]=a[j];

                                     a[j]=temp;

                       }

     }

}

插入排序:

#include<stdio.h>

int main()

{

    int a[5],i;

    void insertionsort(int a[],int n);

    for(i=0;i<5;i++)

    scanf("%d",&a[i]);

    insertionsort(a,5);

    for(i=0;i<5;i++)

    printf("%d",a[i]);

    return 0;

}

void insertionsort(int a[],int n)

{

     int i,j,key;

     for(j=1;j<n;j++)

     {

                     key=a[j];

                     i=j-1;

                     while(i>=0&&a[i]>key)

                     {

                                          a[i+1]=a[i];

                                          i--;

                     }

                     a[i+1]=key;

     }

}

合并排序:
#include<stdio.h>
int main()
{
    int a[5],i;
    for(i=0;i<=4;i++)
    scanf("%d",&a[i]);
    void mergesort(int a[],int p,int r);
    mergesort(a,0,4);
    for(i=0;i<=4;i++)
    printf("%d",a[i]);
    return 0;
}
void mergesort(int a[],int p,int r)
{
     void merge(int a[],int p,int q,int r);
     int q;
     if(p<r)
     {
            q=(p+r)/2;
            mergesort(a,p,q);
            mergesort(a,q+1,r);
            merge(a,p,q,r);
     }
}
void merge(int a[],int p,int q,int r)
{
     int n1,n2,i,j,k,L[10],R[10];
     n1=q-p;
     n2=r-q-1;
     for(i=0;i<=n1;i++)
     L[i]=a[i+p];
     for(j=0;j<=n2;j++)
     R[j]=a[q+j+1];
     i=0;
     j=0;
     L[n1+1]=65535;
     R[n2+1]=65535;
     for(k=p;k<=r;k++)
     {
                      if(L[i]<=R[j])
                      a[k]=L[i++];
                      else
                      a[k]=R[j++];
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值