求几个C语言的程序 顺序查找,排序(升序和降序),冒泡排序,选择排序,直接插入排序和二分插入排序。

2024年12月01日 12:11
有1个网友回答
网友(1):

首先声明下面的程序不全是我写的,还有就是你说的二分插入排序 不知道是什么,我想应该是二分法查找已经排序的数组吧!!!
希望你能满意。

1.顺序查找

#include
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,x,y;
printf("输入你要查找的数:\n");
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表示找不到
}

2.排序(升序和降序)

#include
void main()
{
int a[5]={};
int i,j;
int temp=0;
for(i=0;i<5;i++)
{
printf("请输入第%d个整数\n",i+1);
scanf("%d",&a[i]);
}
for(i=1;i<5;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<5;i++)
{
printf("排序后的整数:%d\t",a[i]);
}
}
现在是升序的。。如果想改成降序 只要交换一下大小的顺序就好了

3.冒泡排序
#include
main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
for(j=0;j<=9;j++)
{ for (i=0;i<10-j;i++)
if (a[i]>a[i+1])
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<11;i++)
printf("%5d,",a[i] );
printf("\n");
}

4.选择排序
#include
void selectSort(int a[],int n)
{int t,i,j,k;
for(i=0;i{k=i;
for(j=i+1;jif(a[j]k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
}

main()
{int a[100],n,i;
scanf("%d",&n);
puts("Arrange:");
for(i=0;iscanf("%d",&a[i]);
selectSort(a,n);
puts("Sorted Arrange:");
for(i=0;iprintf("%d\t",a[i]);
getch();
}

5.直接插入排序
#include "stdio.h"
#include "conio.h"
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("original array is:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert a new number:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if(a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
getch();
}

6.二分法查找

int binarysearch(int a[],int x,int n)
{
int left,right,middle;
left=0;
right=n-1;
while(left<=right)
{
middle=(left+right)/2;
if(x==a[middle])
return middle;
if(x>a[middle])
left=middle+1;
else right=middle-1;
}
return -1;
}