c++问题,关于排序和查找的,高手来

2025-02-26 23:15:49
推荐回答(2个)
回答1:

您这是在哪里COPY过来的吧
int SL_List::search_SL_List(T *v,int n,T x)
SL_List这个类在哪? 你要用模板,template你声明了没有?
如果你只是单纯的做数字排序和查找,完全没必要用类和模板,对于我们初学者,只需要能实现功能即可。我给你写一段
int Search(int a[],size_t len,int key) //在长度为len的数组a中查找整数key
{
len = sizeof(a) / sizeof(a[0]);
int left = 0,right = len - 1; //二分法查找,两个边界,left和right.
while(1)
{
mid = (left + right) / 2;
if(key > a[mid])
left = mid + 1;
else if(key < a[mid]
right = mid - 1;
else
{
break;
return mid; //返回下表
}
if (right == left )
{
cout << " Not found ." << endl;
break;
return -1;
}
}

回答2:

//在VC6.0中编译通过
//如果有其他问题,追问我。。。 Orz
#include
using namespace std;
#define MaxSize 10
void DirectInsertSort( int _data[], int _n){
int tmp;
for( int i = 1; i < _n; i++){
tmp = _data[i];
for( int j = i - 1; j >= 0; j--){
if( _data[j] >= tmp) _data[j+1] = _data[j];
else break;
}
_data[j+1] = tmp;
}
}
int BinarySearch( int _data[], int _n, int _aim){
int low = 0, mid, high = _n;
while( low <= high){
mid = ( low + high) / 2;
if( _aim == _data[mid]) return mid;
else if( _aim < _data[mid]) high = mid - 1;
else low = mid + 1;
}
return -1;
}
int main(){
int data[MaxSize], aim; //input
for( int i = 0; i < MaxSize; i++){
cout << "输入第" << i + 1 << "个数据:";
cin >> data[i];
}
DirectInsertSort( data, MaxSize); //sort
cout << "排序后的数列:" << endl;
for( i = 0; i < MaxSize; i++){
cout << "data[" << i << "] = " << data[i] << endl;
}
cout << "输入想找的数"; cin >> aim; //search
cout << "data[" << BinarySearch( data, MaxSize, aim);
cout << "] = " << aim << endl;
return( 0);
}