输入任一顺序表,实现顺序查找,对顺序表进行排序,并输出结果,对有序顺序表进行折半查找
哪一步有问题啊??“?
#include <stdio.h>
typedef struct _sqlist
{
int a[1000];
int len;
}sqlist;
void sort(sqlist *sq)
{
for(int i=0;i<sq->len-1;i++)
{
for(int j=0;j<sq->len-1-i;j++)
{
if(sq->a[j] > sq->a[j+1])
{
int t = sq->a[j];
sq->a[j] = sq->a[j+1];
sq->a[j+1] = t;
}
}
}
}
int search(sqlist *sq,int m)
{
int begin = 0,end = sq->len - 1;
while(begin <= end)
{
int mid = (begin + end)/2;
if(sq->a[mid] == m)
return mid;
if(sq->a[mid] < m)
begin = mid + 1;
else
end = mid - 1;
}
return -1;
}
int main()
{
sqlist sq;
int m,idx=0;
printf("输入顺序表长度:");
scanf("%d",&sq.len);
printf("输入%d个整数:",sq.len);
for(int i=0;i<sq.len;i++)
scanf("%d",&sq.a[i]);
sort(&sq);
printf("排序后为:");
for(int i=0;i<sq.len;i++)
printf("%d ",sq.a[i]);
printf("\n");
printf("输入要查找的整数:");
scanf("%d",&m);
idx = search(&sq,m);
if(idx < 0)
printf("没有这个整数");
else
printf("%d是第%d个整数",m,idx+1);
return 0;
}
顺序表本质就是数组,运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define MAXNUM 100
typedef struct _list
{
int data[MAXNUM];
int size;
}List;
//排序
void bubbleSort(List* ls)
{
int i, j, t;
for (i = 0; i < ls->size - 1; i++)
{
for (j = 0; j < ls->size - 1 - i; j++)
{
if (ls->data[j] > ls->data[j + 1]) //升序排序
{
t = ls->data[j];
ls->data[j] = ls->data[j+1];
ls->data[j+1] = t;
}
}
}
}
//顺序表以升序排列时,折半查找x
int binSearch(List ls,int x)
{
int low, high, mid;
low = 0;
high = ls.size - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (x < ls.data[mid])
high = mid - 1;
else if (x > ls.data[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
int main()
{
List ls;
ls.size = 0;
int n, i;
int index = 0;
printf("请输入顺序表中数字的个数:");
scanf("%d", &ls.size);
printf("请输入%d个整数:\n",ls.size);
for (i = 0; i < ls.size; i++)
{
scanf("%d", &ls.data[i]);
}
printf("请输入要查找的数:");
scanf("%d", &n);
bubbleSort(&ls); //排序
index = binSearch(ls, n); //查找
printf("排序后的顺序表:\n");
for (i = 0; i < ls.size; i++)
printf("%d ", ls.data[i]);
printf("\n");
if (index < 0)
printf("未找到\n");
else
printf("找到,%d在排序后的顺序表的下标为 %d", n,index);
return 0;
}