对一个二维数组中的数据排序,方法如下: 将整个数组中值最小的元素所在行调整为数组第一行, 将除第一行外的行中最小元素所在行调整为第2行, 将除第1,2行外的行中最小值元素所在行调整为第3行,以此类推

对一个二维数组中的数据排序,方法如下:

将整个数组中值最小的元素所在行调整为数组第一行,

将除第一行外的行中最小元素所在行调整为第2,

将除第1,2行外的行中最小值元素所在行调整为第3,以此类推

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd.
File name:
Author:Jerey_Jobs    Version:0.1    Date:
Description:
Funcion List:
*****************************************************/

#include <stdio.h>
#define N 5        //宏定义N*N的数组和最大值
#define MAX 32768

int fun(int s[N][N]);

int main()
{
    int s[N][N];        //定义整形二维数组、循环变量i,j
 int i,j;

 printf("Enter the array %d*%d:\n",N,N);        //提示用户规定大小输入数组
 for(i = 0;i < N;i++)
 {
  for(j = 0;j < N;j++)
  {
   scanf("%d",&s[i][j]);
  }
 }

 printf("The original array :\n");        //按格式输出数组,以供和变化后的数组比较
 for(i = 0;i < N;i++)
 {
  for(j = 0;j < N;j++)
  {
   printf("%5d",*(*(s + i) + j));
  }
  printf("\n");
 }

 fun(s);        //调用函数进行排序

    return 0;
}

int fun(int s[N][N])
{
 int a[N],b[N] = {0};        //定义中间变量数组a存放每一行最小数
 int i,j,k = 0;             //定义中间变量数组b存放每一行经过比较之后从小到大的行号
 int temp,m;

 for(i = 0;i < N;i++)        //利用循环找出每一行最小的数,赋值给a[]数组
 {
  temp = s[i][0];
  for(j = 1;j < N;j++)
  {
   if(temp > s[i][j])
   {
                temp = s[i][j];
   }
  }
  a[i] = temp;
 }

/* for(i = 0;i < N;i++)
 {
  printf("%5d",a[i]);
 }
 printf("\n");                      实验上一个for循环中是否成功读取*/

 while(k < N)        //对每一行最小的数进行比较,按照数字从小到大排列他们的行号
 {
  temp = a[k];
  for(i = 0;i < N;i++)
  {
   if(temp >= a[i])
   {
    temp = a[i];
    b[k] = i;
   }
  }
  temp = b[k];
  a[temp] = MAX;        //对每一个找出来的最小的值赋值为MAX,这样就找到第二小的数
  k++;
 }

 printf("The array after funcation is :\n");        //利用循环输出改变后的数组
 for(i = 0;i < N;i++)
 {
  for(j = 0;j < N;j++)
  {
   temp = b[i];
   printf("%5d",s[temp][j]);
  }
  printf("\n");
 }

    return 0;
}

你可能感兴趣的:(对一个二维数组中的数据排序,方法如下: 将整个数组中值最小的元素所在行调整为数组第一行, 将除第一行外的行中最小元素所在行调整为第2行, 将除第1,2行外的行中最小值元素所在行调整为第3行,以此类推)