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的比較次數;

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