c语言 编写程序 使用递归
发布网友
发布时间:2022-05-13 09:48
我来回答
共1个回答
热心网友
时间:2023-10-05 09:15
#include <stdio.h>
void SelectionSort(int *a, int n)//选择排序
{
int i,j;
int min;
int t;
for(i = 0; i < n-1; i ++)
{
int min = i;
for(j = i+1; j < n; j ++)
if(a[min] > a[j])
{
min = j;
}
t = a[min];
a[min] = a[i];
a[i] = t;
}
}
int binarySearch(int a[],int low,int high ,int x)//递归折半查找
{
int mid ;
if(low <= high)
{
mid = (low + high)/2;
if(x < a[mid])
binarySearch(a,low,high-1,x);
else
if(x > a[mid])
binarySearch(a,low+1,high,x);
else
return mid;
}
else
return -1;
}
int main(void)
{
int i,j;
int x;
int a[11];
int index;
for(i = 0; i < 10; i++)//输入十个数
scanf("%d",&a[i]);
SelectionSort(a,10);//选择法进行升序排列
printf("排序后的数组:");
for(i = 0; i < 10; i++)//输出数组
printf("%d ",a[i]);
printf("\n输入要查找的x:");
scanf("%d",&x);
index = binarySearch(a,0,9,x);
if(index != -1)
printf("%d在数组内,下标识index= %d\n",x,index);//x在数组内则输出x的下标
else //若不在,则插入数组中
{
for(i = 0; i < 10;i++)
if(x < a[i])
break;
for(j = 9; j>=i; j--)
{
a[j+1] = a[j];
}
a[j] =x;
printf("x插入后的数组为:\n");
for(i = 0; i < 11; i++)//输出插入x后的新数组
printf("%d ",a[i]);
}
system("PAUSE");
return 0;
}