查找算法之索引顺序查找

/***************
索引顺序查找算法:分块查找,是顺序查找的一种改进
1.将数组分块,并标记各子块的数据范围
2.根据查找的数据大小,决定在哪一子块内顺序查找
***************/
#include<iostream>
using namespace std;
#include<time.h>

#define n 18

int main()
{
  time_t ts;
  srand((unsigned int)time(&ts));                   //设置随机数种子
  int a[n]={0};
  for(int i=0;i<n;i++)
  {//将数组分为3块,第一块存储的是22以内的数据,第二块存储的是23-48的数据,第三块存储的是49-86的数据
   //如何让随机数据限定在一个范围内呢,可以利用除模加法的方式:例如:要让随机数在m<=r<=n,公式:rand()%(n-m+1)+m
	  if(i<6)
      {
		  a[i]=rand()%23; 
	      cout<<a[i]<<" ";
	  }
	  if(i>=6 && i<12)
	  {
	      a[i]=rand()%26+23;
	      cout<<a[i]<<" ";
	  }
	  if(i>=12 && i<18)
	  {
	   	  a[i]=rand()%39+48;
	      cout<<a[i]<<" ";
	  }
  }

  int m;
  cout<<"\n请输入查找的数据\n";
  cin>>m;
  if(m<=22)
  {
    int i;
    for(i=0;i<6;i++)
	{
	  if(m==a[i])
	  {
	     cout<<"你要查找的数据:"<<a[i]<<endl;
		 break;
	  }
	}
	if(i==6)
	{
	  cout<<"error\n";
	}
  }
  if(m>22 && m<=48)
  {
	int j;
    for(j=6;j<12;j++)
	{
	   if(a[j]==m)
	   {
	      cout<<"你要查找的数据:"<<a[j]<<endl;
		  break;
	   }
	}
	if(j==12)
	{
	  cout<<"error\n";
	}
  }
  if(m>48 && m<=86)
  {
	int k;
    for(k=12;k<18;k++)
	{
	   if(a[k]==m)
	   {
	      cout<<"你要查找的数据:"<<a[k]<<endl;
		  break;
	   }
	}
	if(k==18)
	{
	  cout<<"error\n";
	}
  }
  return 0;

}

    原文作者:查找算法
    原文地址: https://blog.csdn.net/BeyondLCG/article/details/53438399
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞