C语言学习历程——编程练习2——06

来源:互联网 发布:安卓lua 虚拟按键源码 编辑:程序博客网 时间:2024/05/20 06:09
   5.对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
   例如 3行3列 的二维数组   34,85,72,93,49,28,48,12,43

   输出 34, 72, 85   93, 49, 28   12, 43, 48


分析:这个题目直接按照题目的意思,找到偶数行奇数行分别排序


下面是代码实现:


/*************************************************************************************
   对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
   例如 3行3列 的二维数组   34,85,72,93,49,28,48,12,43
   输出 34, 72, 85   93, 49, 28   12, 43, 48
*************************************************************************************/


#include <stdio.h>


#define N 4


void Swap (int *a, int *b)  //交换数
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}


void S_L_Sort(int *Arr)  //从小到大排序,选择
{
int i = 0;
int j = 0;
int min_index = 0;


for (i = 0; i < N - 1; i++)
{
min_index = i;
for (j = i + 1; j < N; j++)
{
if (Arr[j] < Arr[min_index])
{
min_index = j;
}
}
if (min_index != i)
{
Swap(&Arr[min_index], &Arr[i]);
}
}
}


void L_S_Sort(int *Arr)  //从大到小排序,冒泡
{
int i = 0;
int j = 0;


for (i = 0; i < N - 1; i++)
{
for (j = 0; j < N - i - 1; j++)
{
if (Arr[j] < Arr[j + 1])
{
Swap(&Arr[j], &Arr[j + 1]);
}
}
}
}


void ArrSort(int (*Arr)[N])
{
int i = 0;
while (i < N)
{
if (i % 2 == 0)
{
S_L_Sort(Arr[i]); //偶数行从小到大排序
}
else
{
L_S_Sort(Arr[i]); //奇数行从大到小排序
}
i++;
}
}


void PrintArr (int (*Arr)[N])  //打印二维数组
{
int i = 0;
int j = 0;


for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (j % 4 == 0)
{
printf ("\n");
}
printf ("%3d", Arr[i][j]);
}
}
printf ("\n");
}


int main()
{
int Arr[N][N] = {6,51,32,16,5,46,84,3,53,46,31,35,16,54,15,3}; //定义一个4*4的二维数组

ArrSort(Arr);
PrintArr(Arr); //按照要求排序并打印


return 0;
}

0 0
原创粉丝点击