查找-是最常见的数据操作之一,数据结构核心运算之一,其重要性不言而喻。顺序查找是人们最熟悉的查找策略,对于小规模的数据,顺序查找是个不错的选择。
(一)基本思想
从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。
1 从表中的第一个元素开始,依次与关键字比较。
2 若某个元素匹配关键字,则查找成功。
3 若查找到最后一个元素还未匹配关键字,则查找失败。
(二)时间复杂度
顺序查找平均关键字匹配次数为表长的一半,其时间复杂度为O(n)。
(三)顺序查找的优缺点
顺序查找的优点是对表无要求,插入数据可在O(1)内完成。
缺点是时间复杂度较大,数据规模较大时,效率较低。
(四)代码实现
1 C语言
#include <stdio.h>
int seq_search(int array[], int n, int key)
{
int i;
for(i = 0; i < n; i++)
{
if(key == array[i])
{
return i; //查找成功
}
}
return -1; //查找失败
}
int main()
{
int array[] = {3, 5, 2, 7, 6};
int num = 7;
int len = sizeof(array) / sizeof(int);
int index = seq_search(array, len, num);
if(-1 != index)
{
printf("%d的位置为%d\n", num, index);
}
else
{
printf("没有找到此元素");
}
return 0;
}
运行结果:
7的位置为3
2 C++函数模板
#include <iostream>
using namespace std;
#ifndef SEARCH_METHODS
#define SEARCH_METHODS
template<class T>
int SeqSearch(T list[], int len, T key)
{
for(int i = 0; i < len; i++)
{
if(key == list[i])
{
return i;
}
}
return -1;
}
#endif
int main()
{
int array[] = {3, 5, 2, 7, 6};
int num = 7;
int len = sizeof(array) / sizeof(int);
int index = SeqSearch(array, len, num);
if(-1 != index)
{
cout<< num << "的位置为" << index << endl;
}
else
{
cout << "没有找到此元素";
}
return 0;
}
3 Java
package com.z;
public class Search {
public static int SeqSearch(int[] array, int value){
for(int i = 0; i <= array.length-1; i++) {
if(value == array[i]) {
return i;
}
}
return -1;
}
public static void main(String[] args){
int[] a = new int[]{3,5,2,7,6};
int val = 7;
int index = SeqSearch(a, val);
if(-1 != index) {
System.out.println(val + "的位置为" + index);
} else {
System.out.println("没有找到此元素");
}
}
}
4 Python
def seq_search(a, value):
for i in range(len(a)):
if value == a[i]:
return i
return -1
arr = [3, 5, 2, 7, 6]
number = 7
index = seq_search(arr, number)
if -1 == index:
print "Number not exists"
else:
print "The index of the number is %d" % index
input("Press any key to exit")