常用排序&查找算法(C语言实现)

warning: 这篇文章距离上次修改已过1583天,其中的内容可能已经有所变动。

冒泡排序

//冒泡排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
    int a[10];//={45,42,132,78,65,64,71,48,13,137};
    int i,t,j;
     for (i=0;i<10;i++)
    {
        printf ("请输入第%d数据!",i+1);
        scanf ("%d",&a[i]);
    }
    for (i=1;i<10;i++)
    {
        for (j=0;j<10-i;j++)
        {
            if (a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
        }
    }
    for (i=0;i<10;i++)
    {
        printf ("【%d】",a[i]);
    }
    system("pause");    //dos暂停命令,可省去!
    return 0;
}

简单选择排序

//简单选择排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
    int a[10]={10,45,3,45,46,44,78,66,75,985};
    int i,j,min,t;
    for(i=0;i<10;i++)
    {
        min=i;
        for(j=i+1;j<10;j++)
          if(a[min]>a[j])
            min=j;
            t=a[i];
            a[i]=a[min];
            a[min]=t;
    }

    for(i=0;i<10;i++)
    {
        printf("%d,",a[i]);
    }

    system("pause");
    return 0;
}

直接插入排序

//直接插入排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
    int a[]={45,42,132,78,65,64,71,48,13,137};
    int i,t,j;
    for (i=1;i<10;i++)//控制执行次数(n-1)
    {
        t=a[i];//保存无序区第一条记录
        j=i-1;
        while (a[j]>t&&j>=0)
        {
            a[j+1]=a[j];
            j--;   
        }
        a[j+1]=t;
    }
    for (i=0;i<10;i++)
    {
        printf ("【%d】",a[i]);
    }
    system("pause");
    return 0;
}

顺序查找

//顺序查找
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[10]={45,42,132,78,65,64,71,48,13,137};
int i,x,y;
printf("输入你要查找的数:");
scanf("%d",&x);
y=0; //标记是否已找到,y=1表是找到了,y=0表示没找到
for(i=0;i<10;i++) //循环,把x和数组中的元素一个个比较
{
if(x==a[i]) //如果x=a[i]说明已经找到
{
y=1; //把y变成1,说明已经找到了 
printf("你要查找的数%d在第个%d位置\n",x,i+1); //输出找到的相关信息
break; //跳出循环
}
}
if(y==0)printf("无法找到你要查找的数\n"); //y=0表示找不到

    system("pause");
    return 0;
}

二分查找

//二分查找
#include <stdio.h>
#include <stdlib.h>
void main()
{
    int a[10]={25,29,36,45,78,88,97,136,456,888};
    int low,high,mid,x;
    printf ("请输入要查找的数据:");
    scanf("%d",&x);
    low=0;
    high=9;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(a[mid]==x) break;
        else if(a[mid]>x)high=mid-1;
        else low=mid+1;
    }
    if(low>high)
        printf("查找失败\n");

    else
        printf("a[%d]是查找记录\n",mid);
    
    system("pause");//dos暂停命令,可省略!
    return 0;
}

评论已关闭