输入一个随机矩阵,之后排序查找某个数是否在矩阵中_风清扬song的空间_ ...

1给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增

1 2 3

3 5 6

4 8 9

现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)(百度实习生笔试xx)

#include<stdio.h>
#include<stdlib.h>


void paixue(int temp[],int a[][10],int n)/*对输入的矩阵进行排序,排完序后在将矩阵放回*/
{

int i,j,k=0,temp1,count=0,min;

for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
   temp[k++]=a[i][j];
   count++;
}

for(i=0;i<count-1;i++)/*选择排序*/
{
min=i;
for(j=i;j<count;j++)
{
   if(temp[min]>temp[j])
   min=j;
}

if(min!=i)
{
temp1=temp[min];
temp[min]=temp[i];
temp[i]=temp1;
}

}
k=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=temp[k++];
}

zheban_find(int a[][10],int i,int k,int n)/*对输入的某个值进行折半查找*/
{
int left,right,middle;
left=0;
right=n-1;

while(left<=right)
{
     middle=(left+right)/2;

if(k==a[i][middle])
   return middle;
else if(k>a[i][middle])
   left=middle+1;
else if(k<a[i][middle])
   right=middle-1;
}
return -1;

}

void main()
{

int i,j,k,n,a[10][10],flag=0;
int *temp;

temp=(int *)malloc(100);
if(NULL==temp)
{
   printf("allocation failture\n");
   exit(0);
}

printf("请输入矩阵的行和列\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{
   printf("请输入矩阵的第%d行\n",i+1);
   for(j=0;j<n;j++)
   scanf("%d",&a[i][j]);
}

printf("输入的矩阵是\n");
for(i=0;i<n;i++)
{
   for(j=0;j<n;j++)
   {
    printf("%d\t",a[i][j]);
   }
   putchar('\n');
}


paixue(temp,a,n);

printf("输入的矩阵排序后是\n");
for(i=0;i<n;i++)
{
   for(j=0;j<n;j++)
   {
    printf("%d\t",a[i][j]);
   }
   putchar('\n');
}

printf("请输入要查找的值\n");
scanf("%d",&k);

   for(i=0,j=n-1;i<n;i++)
{
   if(k<a[i][j]||k==a[i][j])
   {
   k=zheban_find(a,i,k,n);
  
   if(k>=0)
   {

   printf("找到了K在矩阵的%d行,%d列\n",i+1,k+1);
   flag=1;
   }
   
   }
  
}

   if(flag==0)
   printf("没有找到要找的数\n");

   free(temp);
}




郑重声明:资讯 【输入一个随机矩阵,之后排序查找某个数是否在矩阵中_风清扬song的空间_ ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——