对一个二维数组中的数据排序,方法如下:
将整个数组中值最小的元素所在行调整为数组第一行,
将除第一行外的行中最小元素所在行调整为第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;
}