先写两个调用函数findmin用于找到剩余数组里最小的数,返回最小数所在的行。另一个函数exchange就是用于交换两行的元素。
程序如下:
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:fhb Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include<time.h>
#define N 5
void exchange(int a[][N],int m,int n)
{
int tmp,i;
for(i = 0;i < N;i++)
{
tmp=a[m][i];
a[m][i]=a[n][i];
a[n][i]=tmp;
}
}
//返回剩余数组里最小数所在行下标
int findmin(int a[][N],int m)//剩余N-m行
{
int min = a[m][0];
int min_i = m;
int i,j;
for(i = m;i < N;i++)
{
for(j = 0;j < N;j++)
{
if(min > a[i][j])
{
min=a[i][j];
min_i=i;
}
}
}
return min_i;
}
int main()
{
int a[N][N];//={5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1};
int i,j;
int l;
srand(time(NULL));
for(i = 0;i < N;i++)
{
for(j = 0;j < N;j++)
{
a[i][j] = rand() % 100;
printf("%3d",a[i][j]);
}
printf("\n");
}
for(i = 0;i < N-1;i++)//剩余N-i行
{
l=findmin(a,i);
exchange(a,i,l);
}
printf("after sort the array are:\n");
for(i = 0;i < N;i++)
{
for(j = 0;j < N;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
用time和srand,rand函数随机取值,用于验证;
结果如图: