对一个二维数组中的数据排序
方法如下:
将整个数组中值最小的元素所在行调整为数组第一行, 将除第一行外的行中最小元素所在行调整为第2行,
将除第1,2行外的行中最小值元素所在行调整为第3行,以此类推
都是简单粗暴的办法,遍历,遍历,还是遍历……
#include <stdio.h>
#include <malloc.h>
void arrSwap(int * a, int * b, int N) //交换两个数组的元素
{
int * c = (int *)malloc(sizeof (int) * (unsigned int)N);
for(int i = 0 ; i < N; i++)
{
c[i] = a[i];
a[i] = b[i];
b[i] = c[i];
}
}
void sort(int ** arr, int N)
{
int min = arr[0][0]; //最小值
int min_row = 0; //最小值所在行数
for(int m = 0; m < N - 1; m++) //操作一次之后,操作范围向下一行
{
min = arr[m][0];
min_row = m;
for(int i = m ; i < N; i++) //遍历行
{
for(int j = 0; j < N; j++) //遍历每行的元素
{
if(min > arr[i][j])
{
min = arr[i][j]; //更新最小值
min_row = i; //更新最小值所在行数
}
}
}
arrSwap(arr[m], arr[min_row], N);
}
}
int main()
{
int N = 4;
printf("input the N (N*N arr):\n");
scanf("%d", &N);
int ** arr = (int **)malloc(sizeof (int) * (unsigned int)N);
for(int i = 0; i < N; i++)
{
arr[i] = (int *)malloc(sizeof (int) * (unsigned int)N);
}
printf("input the number:\n");
for(int i = 0 ;i < N; i++)
{
for(int j = 0; j < N; j++)
{
scanf("%d", &arr[i][j]); //输入
}
}
printf("The original arr is:\n");
for(int i = 0 ;i < N; i++)
{
for(int j = 0; j < N; j++)
{
printf("%d\t", arr[i][j]); //输出测试
}
printf("\n");
}
printf("\n");
sort(arr, N); //函数执行
printf("The result:\n");
for(int i = 0 ;i < N; i++)
{
for(int j = 0; j < N; j++)
{
printf("%d\t", arr[i][j]); //输出
}
printf("\n");
}
return 0;
}