/*
对一个二维数组中的数据排序,方法如下:
将整个数组中值最小的元素所在行调整为数组第一行,
将除第一行外的行中最小元素所在行调整为第2行,
将除第1,2行外的行中最小值元素所在行调整为第3行,以此类推
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 5
void swap(int a[],int b[])
{ //swap() 两行元素交换函数,传入的是需要交换的两行列指针,数组名做形参看作指针
int tmp[N];
for(int i=0;i<N;i++)
{
tmp[i]=a[i];
a[i]=b[i];
b[i]=tmp[i];
}
}
int min(int arr[])
{
int min;
for(int p=0;p<N;p++)
{
if(p==0)
{
min=arr[0];
}
if(min>arr[p])
{
min=arr[p];
}
}
return min;
}
int main()
{
int tmp;
int brr[N];
int arr[N][N];
//int l; //不需要设置列l来记录列的值,因为可以通过比较存入brr[]中的元素大小直接对应所在行,不需要对应列,只需要注意每次交换行之后或之前要将对应的最小值也交换,
//从而达到对应brr数组里最小值对应相应的行,从而可以通过比较brr中的元素大小来判断要不要交换对应二维数组中的行
srand((unsigned)time(NULL));
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++) //给N行N列的数组赋予随机值; 注意N要在文件开头进行宏定义
{
arr[i][j]=rand()%100;
printf("%4d",arr[i][j]);
}
printf("\n");
}
for(int p=0;p<N;p++)
{
brr[p]=min(*(arr+p));
}
for(int q=0;q<N-1;q++)
{
for(int o=q+1;o<N;o++)
if(brr[q]>brr[o])
{
tmp=brr[q]; //使用选择排序时注意每次比完将数组冒泡完后记得将对应数组中的最小值也交换下,
brr[q]=brr[o]; //与对应数组行保持一致
brr[o]=tmp;
swap(*(arr+q),*(arr+o));
}
}
printf("下面是按照每行最小值排序之后的数组arr:\n");
for(int f=0;f<N;f++)
{
for(int u=0;u<N;u++)
{
printf("%4d",arr[f][u]);
}
printf("\n");
}
printf("\n");
return 0;
}
标签:arr,第一行,min,int,行中,brr,数组,元素 From: https://www.cnblogs.com/rabbitandtankbestmatch/p/17448227.html