一个11×11的数组,利用指针求中位数,以及中位数所在的行列序号(用c语言)

一个11×11的数组,利用指针求中位数,以及中位数所在的行列序号(用c语言)有大佬可以提供一下代码吗,写不出来

11乘以11的数组,共121个数,中位数是排序后的第61个数,因为要输出行和列,所以需要用一级指针复制数组。
代码如下:

#include <stdio.h>
#include <stdlib.h>
//冒泡排序
void bubble_sort(int* a,int n)
{
    int i,j,t;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if(a[j] > a[j+1])  //从小到大,升序
            {
                t = a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}

int main()
{
    int a[11][11],i,j,t=0;
    int *p = (int*)malloc(sizeof(int)*121); //把a中的数据保存到p中,用p进行排序,找中位数。
    printf("请输入11*11的数组:\n");
    for(i=0;i<11;i++)
    {
        for (j=0;j<11;j++)
        {
            scanf("%d",&a[i][j]);
            *(p+t) = a[i][j];
            t++;
        }
    }

    //对p排序
    bubble_sort(p,121);
    //第61个数即为中位数
    for(i=0;i<11;i++)
    {
        for (j=0;j<11;j++)
        {
            if(a[i][j] == *(p+60))
                break;
        }
    }
    //序号从0开始,也就是第1行的序号为0,如果序号需要从1开始,显示就改成i+1和j+1
    printf("中位数所在的行序号为%d,列序号为%d",i,j); 
    free(p);
    p=0;
    return 0;
}





你这个二维数组中的数据首先要没有重复。有重复的话,如果中位数是某个重复数字,不能说哪一个是中位数啊。
如果没有重复,那就将11*11个整数排序,由于总数是奇数,所以中位数就是最中间的那个元素。然后将该元素值在二维数组中进行搜索,找到该值就知道其行列序号了。

#include <stdio.h>
int fun(int*p)
{
    for(int i=0;i<10;i++)
        for(int j=0;j<10-i;j++)
        {
            if(p[i] > p[i+1])
            {
                  double d = p[j];
                  p[j] = p[j+1];
                  p[j+1] = d;
            }
        }
   return p[5];
}

int main()
{
    int a[11][11];
    int b[11];
    int i,j,t,c;
    for(i=0;i<11;i++)
        for(j=0;j<11;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<11;i++)
        b[i] = fun(a[i]);
    c = fun(b);
    for(i=0;i<11;i++)
        for(j=0;j<11;j++)
        {
            if(a[i][j] == c)
            {
                printf("中位数行列号为[%d,%d]",i,j);
                return 0;
            }
        }
     return 0;
}


#include <stdio.h>

void swap(int *p,int *q) {
   int t;

   t=*p; 
   *p=*q; 
   *q=t;
}

void sort(int a[],int n) { 
   int i,j,temp;

   for(i=0;i<n-1;i++) {
      for(j=0;j<n-i-1;j++) {
         if(a[j]>a[j+1])
            swap(&a[j],&a[j+1]);
      }
   }
}

int main() {
   int a[] = {6,3,8,5,1};
   int n = 5;
   int sum,i;

   sort(a,n);

   n = (n+1) / 2 - 1;  // -1 as array indexing in C starts from 0

   printf("Median = %d ", a[n]);

   return 0;
}



参考一下