C语言:数据结构之查找--顺序查找

概念:

    查找就是根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素。

主要查找算法:

  1. 顺序表查找:顺序表查找属于无序查找,从第一个关键字开始,逐个关键字进行比较,查找给定关键字;
  2. 二分查找:又称折半查找,属于有序查找,在进行查找之前需要对查找表进行排序,使查找表有序,这样能方便快速查找;
  3. 插值查找:是对二分查找的优化,通过将数据内容与中值关系进行联系,加快查找速度;
  4. Fibonacci查找:也是一种有序查找,利用换黄金分割原理实现,实质就是调整中值;
  5. 线性索引查找:将索引项集合组织为线性结构;
  6. 散列查找:通过散列函数直接获取存储位置;

下面按照上面的描述顺序依次介绍各个查找的C或C++实现,以及相关优化:

顺序表查找:

通过暴力循环逐项比较该项与关键字,时间复杂度o(n);

顺序查找的实现如下:

/*这个循环中每次循环都要判断i是否越界,针对这个情况可以提出优化*/
int search::sequentialSearch(int* a, int n, int key)
{
	int i;
	for (size_t i = 0; i < n; i++)
	{
		if (a[i]==key)
		{
			return i;
		}
	}
	return -1;
}

上面的算法其实不够完美,在for循环中每次都是需要比较i和n的值;下面提出改进版:

int search::sequentialSearch2(int* a, int n, int key)
{
	if (a[0]==key)
	{
		return 0;
	}
	a[0] = key;
	int i = n - 1;
	while (a[i]!=key)
	{
		i--;
	}
	return i == 0 ? -1 : i;
	
}

在上面这个版本中减少了i和n的比较次数;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章