注册 登录
编程论坛 C++教室

[求助]关于数据查询的C++编程

zlj45678988 发布于 2007-06-27 16:42, 923 次点击
一、 题目:数据查询问题2(数组的冒泡排序和分块查找法
2. 基本要求:
(1)要求用C++语言编程,在Visual C++环境下调试完成;
(2)要求各个功能分别使用函数来完成;
(3)分析分块查找算法的查找长度;
(4)程序调试通过后,完成程序文档的处理,源代码加必要的注释。
三、设计方法和基本原理
1. 课题功能描述
课题实现的功能是在一组无序数列中查找某个数据,找到则输出该数据,否则输出未找到信息。
2. 问题详细描述
将一组无序数列通过冒泡排序方法使其成为有序线性表,然后再通过分块查找(索引查找)方法从中查询某个数据,找到则输出该数据,否则输出未找到信息。
希望大家能帮帮忙!不胜感激!我的邮箱zlj45678988@sohu.com
8 回复
#2
aipb20072007-06-27 17:36
冒泡排序:
#include <iostream>

using namespace std;

int main(){
const int size = 5;
int a[size] = {2,56,25,4,8};
//sort
for (int i = 0;i < size - 1;++i){
for (int j = 0;j < size - 1 - i;++j){
if (a[j] > a[j+1]){
//swap
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//display after sorted
for (int i = 0;i < size;++i)
cout << a[i] << " ";
cout << endl;

system("pause");
}

[此贴子已经被作者于2007-6-27 17:37:21编辑过]

#3
aipb20072007-06-27 17:36
2分搜索:


[CODE]#include <iostream>
using namespace std;


int binarySearch_recursive(int a[],int key,int left,int right){
int range = right - left;
int i = left + range/2;
if (range < 2)
return -1;
else if (key == a[i])
return i;
else if (key < a[i])
return binarySearch_recursive(a,key,left,i);
else if (key > a[i])
return binarySearch_recursive(a,key,i,right);
}

int binarySearch_iterative(int a[],int key,int left,int right){
while (right - left > 1){
int range = right - left;
int i = left + range/2;
if (key == a[i])
return i;
else if (key < a[i])
right = i;
else if (key > a[i])
left = i;
}
return -1;
}

int main(){
int a[] = {1,2,3,4,5,6,7,8,9,10};
cout << binarySearch_recursive(a,4,0,9) << endl;
cout << binarySearch_iterative(a,8,0,9) << endl;
system("pause");

}[/CODE]
#4
aipb20072007-06-27 17:37
自己组合下。
#5
zlj456789882007-06-27 17:46

我还得问个幼稚的问题!直接拼在一起就可以了吗?

#6
aipb20072007-06-27 17:51
确实很幼稚。

你如果读不懂代码,那我给你也没用。
自己在多try一下吧,问问老师,同学。
#7
zlj456789882007-06-27 17:53

拜托,我只是学了一点C++,冒泡法会,但是分块查找的确是不会!麻烦您给组合一下吧

#8
aipb20072007-06-27 17:56
你用冒泡排序好后,把排好序的数组作为参数去调用2分搜索的函数即可。

2分搜索有两个版本,随便选一个就好。
#9
zlj456789882007-06-27 18:00

还是不太懂,我自己再弄弄吧

1