c语言 (冒泡法,选择法,折半查找法,插入法)

c语言 (冒泡法,选择法,折半查找法,插入法)

冒泡法
(1)从第一个数开始,相邻两个数两两比较,将大的(或小的)交换到后面,然后继续比较第2、3个数……当比较完最后两个数的时候,最大数(或最小数)便排在最后了。此过程称为“一趟”。
(2)将最大数排除在外,其余数重复步骤1。
(3)重复步骤2,直到所有数都排好为止。

#include<stdio.h>
int main()
{
  int i,j,a[6],t;
  printf("输入六个整数:\n");
  for(i=0;i<=5;i++)
  {
     scanf("%d",&a[i]);
  }
  printf("从小到大排序为:\n");
  for(i=0;i<=5;i++)
    for(j=i+1;j<=5;j++)
    {
      if(a[i]>a[j])
      {  
         t=a[i];
         a[i]=a[j];
         a[j]=t;
      }
    }
  for(i=0;i<=5;i++)
  {
    printf("%d ",a[i]);
  }
  return 0;
}

选择法(打擂台)
1、找出一个最小数,交换到最前面。
2、在剩下的数里面,再找一个最小的,交换到剩下数的最前面
3、重复步骤2 ,直到所有数都已排好。

#include<stdio.h>
int main()
{
  int i,j,a[6],t,k;
  printf("输入六个整数:\n");
  for(i=0;i<=5;i++)
  {
     scanf("%d",&a[i]);
  }
  printf("从小到大排序为:\n");
  for(i=0;i<=5;i++)
{
     k=i;
     for(j=i+1;j<=5;j++)
  {
     if(a[k]>a[j])
      k=j;
  }
     if(k!=i)
     {
      t=a[k];
      a[k]=a[i];
      a[i]=t;
      }
}
for(i=0;i<6;i++)
printf("%d ",a[i]);
return 0;
}

折半查找法(二分查找法)
对于已经排列好的一组数进行查找数据。

#include<stdio.h>
int main()
{
  int i,key,low,height,mid,a[6]={1,2,3,4,5,6};
  printf("输入一个整数:");
  scanf("%d",&key);
  low=0;
  height=5;
  while(low<=height)
  {
    mid=(low+height)/2;
    if(a[mid]==key)
    break;
    else if(a[mid]<key)  
    low=mid+1;
    else if(a[mid]>key)
    height=mid-1;
  }
  if(low<height)
  printf("yes");
  else
  printf("no");
  return 0;
  }

插入法
在有序数列中插入一个数据。
1找位置
2腾位置
3放下去
用折半法下使用插入法。

#include<stdio.h>
int main()
{
  int i,j,key,low,height,mid,a[7]={1,2,3,5,6,9};
  printf("输入一个整数:");
  scanf("%d",&key);
  low=0;
  height=5;
  while(low<=height)
  {
    mid=(low+height)/2;
    if(a[mid]==key)
    break;
    else if(a[mid]<key)  
    low=mid+1;
    else if(a[mid]>key)
    height=mid-1;
  }
  if(low<=height)
  printf("yes");
  else{   //开始插入法
  for(j=5;j>=0&&key<a[j];j--)
  {
  a[j+1]=a[j];
  a[j]=key;
  }
  for(i=0;i<=6;i++)
  {
    printf("%d",a[i]); 
  }
}
  return 0;
  }
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值