在这种搜索方法中,首先创建一个索引文件,该文件包含获得索引时所需记录的某些特定组或分区,然后部分索引由于位于指定组中而花费的时间更少。
注意:当用户请求特定记录时,它将首先找到该特定记录所在的索引组。
索引顺序搜索的特征:
- 在索引顺序搜索中,除了数组之外,还放置了排序索引。
- 索引中的每个元素都指向数组或另一个扩展索引中的元素块。
- 索引首先在数组中搜索,然后在数组中引导搜索。
注意:索引顺序搜索实际上是多次创建索引,就像创建索引的索引一样。
通过图表“索引顺序搜索”进行解释:
代码:
C
// C program for Indexed Sequential Search
#include
#include
void indexedSequentialSearch(int arr[], int n, int k)
{
int elements[20], indices[20], temp, i, set = 0;
int j = 0, ind = 0, start, end;
for (i = 0; i < n; i += 3) {
// Storing element
elements[ind] = arr[i];
// Storing the index
indices[ind] = i;
ind++;
}
if (k < elements[0]) {
printf("Not found");
exit(0);
}
else {
for (i = 1; i <= ind; i++)
if (k <= elements[i]) {
start = indices[i - 1];
end = indices[i];
set = 1;
break;
}
}
if (set == 0) {
start = indices[i - 1];
end = n;
}
for (i = start; i <= end; i++) {
if (k == arr[i]) {
j = 1;
break;
}
}
if (j == 1)
printf("Found at index %d", i);
else
printf("Not found");
}
// Driver code
void main()
{
int arr[] = { 6, 7, 8, 9, 10 };
int n = sizeof(arr) / sizeof(arr[0]);
// Element to search
int k = 8;
indexedSequentialSearch(arr, n, k);
}
Java
// Java program for Indexed Sequential Search
import java.io.*;
class GFG {
static void indexedSequentialSearch(int arr[], int n,
int k)
{
int elements[] = new int[20];
int indices[] = new int[20];
int temp, i;
int j = 0, ind = 0, start = 0, end = 0, set = 0;
for (i = 0; i < n; i += 3) {
// Storing element
elements[ind] = arr[i];
// Storing the index
indices[ind] = i;
ind++;
}
if (k < elements[0]) {
System.out.println("Not found");
return;
}
else {
for (i = 1; i <= ind; i++)
if (k <= elements[i]) {
start = indices[i - 1];
set = 1;
end = indices[i];
break;
}
}
if (set == 0) {
start = indices[i - 1];
end = n;
}
for (i = start; i <= end; i++) {
if (k == arr[i]) {
j = 1;
break;
}
}
if (j == 1)
System.out.println("Found at index " + i);
else
System.out.println("Not found");
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 6, 7, 8, 9, 10 };
int n = arr.length;
// Element to search
int k = 8;
indexedSequentialSearch(arr, n, k);
}
}
// This code is contributed by shs..
Python3
# Python program for Indexed
# Sequential Search
def indexedSequentialSearch(arr, n, k):
elements = [0] * 20
indices = [0] * 20
j, ind, start, end = 0, 0, 0, 0
set_flag = 0
for i in range(0, n, 3):
# Storing element
elements[ind] = arr[i]
# Storing the index
indices[ind] = i
ind += 1
if k < elements[0]:
print("Not found")
exit(0)
else:
for i in range(1, ind + 1):
if k <= elements[i]:
start = indices[i - 1]
end = indices[i]
set_flag = 1
break
if set_flag == 0:
start = indices[i-1]
end = n
for i in range(start, end + 1):
if k == arr[i]:
j = 1
break
if j == 1:
print("Found at index", i)
else:
print("Not found")
# Driver code
if __name__ == "__main__":
arr = [6, 7, 8, 9, 10]
n = len(arr)
# Element to search
k = 8
# Function call
indexedSequentialSearch(arr, n, k)
# This code is contributed by Ryuga
C#
// C# program for Indexed Sequential Search
using System;
class GFG {
static void indexedSequentialSearch(int []arr, int n, int k)
{
int []elements = new int[20];
int []indices = new int[20];
int i;
int j = 0, ind = 0, start=0, end=0, set = 0;
for (i = 0; i < n; i += 3) {
// Storing element
elements[ind] = arr[i];
// Storing the index
indices[ind] = i;
ind++;
}
if (k < elements[0]) {
Console.Write("Not found");
return;
}
else {
for (i = 1; i <= ind; i++)
if (k <= elements[i]) {
start = indices[i - 1];
set = 1;
end = indices[i];
break;
}
}
if(set == 0)
{
start = indices[i-1];
end = n-1;
}
for (i = start; i <= end; i++) {
if (k == arr[i]) {
j = 1;
break;
}
}
if (j == 1)
Console.WriteLine("Found at index "+ i);
else
Console.WriteLine("Not found");
}
// Driver code
public static void Main () {
int []arr = { 6, 7, 8, 9, 10 };
int n = arr.Length;
// Element to search
int k = 10;
indexedSequentialSearch(arr, n, k);
}
}
// This code is contributed by shs..
PHP
输出:
Found at index 2