求c语言大佬看一下这一题

 我来答
xoaxa
2017-11-21 · TA获得超过8605个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3374万
展开全部

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAXlen 100

void select_sort(int *x, int n,int flag) {     //选择排序,flag == 1时,升序, 0时,降序
int i, j, k;
int t;
for (i = 0; i < n - 1; i++) {     // 要选择的次数:0~(n-2)共n-1次 
k = i;                        // 假设当前下标为i的数最小(大),比较后再调整 
for (j = i + 1; j < n; j++) { // 循环找出最小的数的下标是哪个
if(flag) {
if (*(x + j) < *(x + k)) { //升序 
k = j;            // 如果后面的数比前面的小,则记下它的下标
}
}
else {
if (*(x + j) > *(x + k)) { // 降序
k = j;            // 如果后面的数比前面的大,则记下它的下标
}
}
}  
if (k != i) {                 // 如果k在循环中改变了,就需要交换数据
t = *(x + i);
*(x + i) = *(x + k);
*(x + k) = t;
}
}
}

void show(int a[],int n) {
int i,cnt = 0;
if(n > 10) {
for(i = 0;i < n; ++i) {
if(cnt && cnt%10 == 0) printf("\n");
printf("%5d ",a[i]);
}
}
else {
for(i = 0;i < n; ++i)
printf("%d ",a[i]);
printf("\n");
}
}

int research(int a[],int n,int x) {
int low = 0, high = n;
int mid = (low + high)/2;
while(low <= high) {
int mid = (low + high)/2;
if(a[mid] == x) return mid + 1;
else if(a[mid] > x) high = mid - 1;
else low = mid + 1;
}
return 0;
}

int main() {
int i,n,x,pos;
int iArr[MAXlen];
char an[10];
printf("1、手工输入数据,2、系统随机生成数据。");
scanf("%s",an);
if(an[0] == '2') {
srand((unsigned int)time(NULL));
printf("\n排序前:\n");
for(i = 0 ; i < MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n");
printf("你要查找的数:");
scanf("%d",&x);
pos = research(iArr,MAXlen,x);
if(pos) printf("找到了。%d的索引下标是:%d\n",x,pos - 1);
else printf("对不起,没找到。\n");
select_sort(iArr,MAXlen,1);
printf("\n排序后:\n");
show(iArr,MAXlen);
}
else if(an[0] == '1') {
printf("数据个数:");
scanf("%d",&n);
for(i = 0; i < n; ++i) scanf("%d",&iArr[i]);
show(iArr,n);
printf("你要查找的数:");
scanf("%d",&x);
pos = research(iArr,n,x);
if(pos) printf("找到了。%d的索引下标是:%d\n",x,pos - 1);
else printf("对不起,没找到。\n");
select_sort(iArr,MAXlen,0);
printf("\n排序后:\n");
show(iArr,n);
}
printf("\n\n");
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式