+ -
当前位置:首页 → 问答吧 → C++数组排序问题

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;
}



}

作者: 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

热门下载

更多