C++数组排序问题
时间:2011-12-13
来源:互联网
用选择法对15 个学生的成绩按从大到小的顺序排序,
15 个学生的成绩整数用cin 输入,如果输入的成绩不在[0,
100]之间,则提示“输入错误”。排序完成后,输入一个成
绩,要求用折半查找法找出该成绩是该组中第几个元素的
值(即第几名)。如果该成绩不在数组中,则输出“无此成
绩”。
要求:
1、把排序算法写成函数形式,在主函数中输入15 个数
据,然后调用排序函数排序。
2、在排序过程中尽量减少数据的交换和移动。
3、把查找算法写成函数形式,在主函数中输入1 个数
据,然后调用查找函数排序。
上面的是要求,下面是我自己写的代码,我不能实现“输入一个不是数组中的数则输出无此成绩”这一功能,求大家帮我解答,解答的代码最好附上注释。
#include<iostream>
using namespace std;
void sort(int array[],int);
int reserch(int a[],int,int,int);
int main()
{
int k,j,i,p,m,n,t;
int array[15]={99,22,33,12,67,77,66,88,11,24,23,46,78,90,98};
cout<<endl;
sort(array,15);
cout<<"排序后";
for(k=0;k<15;k++)
{
cout<<array[k]<<' ';
}
cout<<endl;
cout<<"请输入要查找的数,如此数不在此成绩单内则提示无\n";
int left=0,right=sizeof(array)/sizeof(int),seek;
cin>>seek;
int w=reserch(array,left,right,seek);
if(w==999)
{
cout<<"无此数据\n";
}
else
{
cout<<"该数位于第"<<reserch(array,left,right,seek)<<"位";
}
}
void sort(int array1[],int people) //排序
{
int k,p,i,j,q;
for(p=0;p<people;p++)
{
j=p;
for(i=p+1;i<people;i++)
{
if(array1[j]>array1[i])
{
j=i;
}
}
int temp;
temp=array1[p];
array1[p]=array1[j];
array1[j]=temp;
}
}
int reserch(int a[],int left,int right,int h) // 查找
{
int l,r,middle;
l=left;
r=right;
middle=(left+right)/2;
if(h>a[middle] && l!=r)
{
l=middle;
reserch(a,l,r,h);
}
else if(h<a[middle] && l!=r)
{
r=middle;
reserch(a,l,r,h);
}
else if(h!=middle && l==r) //我这样写了但不知道为什么老是无法执行到这一条语句,请大家给我解答下
{
int y=999;
return y;
}
else
{
return middle+1;
}
}
15 个学生的成绩整数用cin 输入,如果输入的成绩不在[0,
100]之间,则提示“输入错误”。排序完成后,输入一个成
绩,要求用折半查找法找出该成绩是该组中第几个元素的
值(即第几名)。如果该成绩不在数组中,则输出“无此成
绩”。
要求:
1、把排序算法写成函数形式,在主函数中输入15 个数
据,然后调用排序函数排序。
2、在排序过程中尽量减少数据的交换和移动。
3、把查找算法写成函数形式,在主函数中输入1 个数
据,然后调用查找函数排序。
上面的是要求,下面是我自己写的代码,我不能实现“输入一个不是数组中的数则输出无此成绩”这一功能,求大家帮我解答,解答的代码最好附上注释。
#include<iostream>
using namespace std;
void sort(int array[],int);
int reserch(int a[],int,int,int);
int main()
{
int k,j,i,p,m,n,t;
int array[15]={99,22,33,12,67,77,66,88,11,24,23,46,78,90,98};
cout<<endl;
sort(array,15);
cout<<"排序后";
for(k=0;k<15;k++)
{
cout<<array[k]<<' ';
}
cout<<endl;
cout<<"请输入要查找的数,如此数不在此成绩单内则提示无\n";
int left=0,right=sizeof(array)/sizeof(int),seek;
cin>>seek;
int w=reserch(array,left,right,seek);
if(w==999)
{
cout<<"无此数据\n";
}
else
{
cout<<"该数位于第"<<reserch(array,left,right,seek)<<"位";
}
}
void sort(int array1[],int people) //排序
{
int k,p,i,j,q;
for(p=0;p<people;p++)
{
j=p;
for(i=p+1;i<people;i++)
{
if(array1[j]>array1[i])
{
j=i;
}
}
int temp;
temp=array1[p];
array1[p]=array1[j];
array1[j]=temp;
}
}
int reserch(int a[],int left,int right,int h) // 查找
{
int l,r,middle;
l=left;
r=right;
middle=(left+right)/2;
if(h>a[middle] && l!=r)
{
l=middle;
reserch(a,l,r,h);
}
else if(h<a[middle] && l!=r)
{
r=middle;
reserch(a,l,r,h);
}
else if(h!=middle && l==r) //我这样写了但不知道为什么老是无法执行到这一条语句,请大家给我解答下
{
int y=999;
return y;
}
else
{
return middle+1;
}
}
作者: zjazja1234 发布时间: 2011-12-13
在线等
作者: zjazja1234 发布时间: 2011-12-13
C/C++ code
#include<iostream> using namespace std; void sort(int array[],int); int reserch(int a[],int,int,int); void Input( int array[], int n ) { for( int i = 0; i < n; ++i ) { while( cin >> array[i] ,cin.fail() )//判断 流状态错误以后会返回true { cout << "error number!" << endl; cin.clear();//清除流状态 cin.sync();//清除缓冲区 } } } int main() { int k,j,i,p,m,n,t; //int array[15]={99,22,33,12,67,77,66,88,11,24,23,46,78,90,98}; int array[15]; Input(array,15); cout<<endl; sort(array,15); cout<<"排序后"; for(k=0;k<15;k++) { cout<<array[k]<<' '; } cout<<endl; cout<<"请输入要查找的数,如此数不在此成绩单内则提示无\n"; int left=0,right=sizeof(array)/sizeof(int),seek; cin>>seek; int w=reserch(array,left,right,seek); if(w==999) { cout<<"无此数据\n"; } else { cout<<"该数位于第"<<reserch(array,left,right,seek)<<"位"; } } void sort(int array1[],int people) //排序 { int k,p,i,j,q; for(p=0;p<people;p++) { j=p; for(i=p+1;i<people;i++) { if(array1[j]>array1[i]) { j=i; } } int temp; temp=array1[p]; array1[p]=array1[j]; array1[j]=temp; } } int reserch(int a[],int left,int right,int h) // 查找 { int l,r,middle; l=left; r=right; middle=(left+right)/2; if(h>a[middle] && l!=r) { l=middle; reserch(a,l,r,h); } else if(h<a[middle] && l!=r) { r=middle; reserch(a,l,r,h); } else if(h!=middle && l==r) //我这样写了但不知道为什么老是无法执行到这一条语句,请大家给我解答下 { int y=999; return y; } else { return middle+1; } }
作者: hnuqinhuan 发布时间: 2011-12-13
还是不太懂
作者: zjazja1234 发布时间: 2011-12-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28