几道笔试题的解法(二)
2010-03-31 20:48
197 查看
题目:给定数组A
,要求实现一个排序算法和一个二分查找算法的程序。
分析:本题主要考察排序和二分查找算法。
代码如下:
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void BubbleSort(int *A, int Length)
{
int i = 0;
int j = 0;
int temp = 0;
for (; i < Length; i++)
{
for (j = i; j < Length; j++)
{
if (A[i] > A[j])
{
Swap(A[i], A[j]);
}
}
}
}
int BinarySearch(int *A, int len, int _num)
{
int Mid = 0;
int _start = 0;
int _end = len - 1;
int _found = 0;
BubbleSort(A, len);
while (_start <= _end)
{
Mid = (_start + _end) / 2;
if (_num < A[Mid]) //如果小于,就在前半部分找
{
_found++;
_end = Mid - 1;
}
else if (_num > A[Mid]) //如果大于,就在后半部分找
{
_found++;
_start = Mid + 1;
}
else //找到的情况
{
_found++;
std::cout << "The value " << _num << " is found!" << '/n';
std::cout << "Total compare:" << _found << '/n';
std::cout << "It's subitem is:" << Mid << '/n';
return Mid;
}
}
std::cout << "The search value " << _num << " is not found !" << '/n';
std::cout << "Total compare:" << _found << '/n';
return -1;
}
,要求实现一个排序算法和一个二分查找算法的程序。
分析:本题主要考察排序和二分查找算法。
代码如下:
void Swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void BubbleSort(int *A, int Length)
{
int i = 0;
int j = 0;
int temp = 0;
for (; i < Length; i++)
{
for (j = i; j < Length; j++)
{
if (A[i] > A[j])
{
Swap(A[i], A[j]);
}
}
}
}
int BinarySearch(int *A, int len, int _num)
{
int Mid = 0;
int _start = 0;
int _end = len - 1;
int _found = 0;
BubbleSort(A, len);
while (_start <= _end)
{
Mid = (_start + _end) / 2;
if (_num < A[Mid]) //如果小于,就在前半部分找
{
_found++;
_end = Mid - 1;
}
else if (_num > A[Mid]) //如果大于,就在后半部分找
{
_found++;
_start = Mid + 1;
}
else //找到的情况
{
_found++;
std::cout << "The value " << _num << " is found!" << '/n';
std::cout << "Total compare:" << _found << '/n';
std::cout << "It's subitem is:" << Mid << '/n';
return Mid;
}
}
std::cout << "The search value " << _num << " is not found !" << '/n';
std::cout << "Total compare:" << _found << '/n';
return -1;
}
相关文章推荐