代码改变世界

线性查找(算法导论中文第三版2.1-3)

2016-11-16 15:15  yojiaku  阅读(413)  评论(1编辑  收藏  举报

线性查找

输入:n个数的一个序列A=<a1, a2, a3, …, an>和一个值v

输出:下标i使得v = A[i], 如果 v 不属于 A,则输出nil

伪代码:

for i=1 to n

if A[i] = v

return I

end if

end for

return nil

C++实现:[偷了个小懒^_^,就在前面的插入排序里面写了一下,很拙劣…]

//============================================================================

// Name : Insertion.cpp

// Author : yojiaku

// Version :

// Copyright : 算法导论-插入排序简单实现(只有mian函数)-按非升序排列-use vector-线性查找

// Description : Hello World in C++, Ansi-style

//============================================================================


#include<iostream>

#include<vector>

usingnamespace std;

using std::vector;


intmain() {

//intnum[] = {8, 3, 8, 7, 0};

vector<int> num;

cout << "请输入大于或等于0的数字进行排序,输出小于0的数字默认输入结束" << endl;

int temp;

while(cin >> temp && temp >= 0){

num.push_back(temp);

}

int length = num.size();

cout << "一共有" << length << "个数字进行比较" << endl;

int key(0);

int i(0);

for(int j = 1; j < length; j++){

key = num[j];

// insert num[j] into the sorted num[0, ..., j-1]

i = j - 1;

while(i >= 0 && num[i] > key){

num[i+1] = num[i];

i = i -1;

}

num[i+1] = key;

}

for(int j = 0; j < length; j++){

cout << num[j] << " ";

}

cout << endl;


int findNum(0);

cout << "请输入要查找的数:" << endl;

cin >> findNum;

int flag(0);

for(int j = 0; j < length; j++){

if(num[j] == findNum){

cout << "找到啦!在第" << j << "个位置" << endl;

flag = 1;

}

}

if(flag == 0){

cout << "nil" << endl;

}

return 0;

}

 

运行结果:

请输入大于或等于0的数字进行排序,输出小于0的数字默认输入结束

12 34 12 78 0 21 34 4545 -2

一共有8个数字进行比较

0 12 12 21 34 34 78 4545

请输入要查找的数:

1

nil

总结:仍然是最简单的挨个查找。

真的不知道这么简单的东西,感觉硬是被自己写得好复杂^3^

15:14:42

编译器:eclipse

操作系统:ubuntu