我也不知道我为什么要写这种,我也就是想写就写了(俗称闲的蛋疼)
C语言二维数组的冒泡排序
写二维数组的冒泡排序前,让我们再来简单的过一遍熟悉的不能再熟悉的一维数组的冒泡排序:
1、一维数组冒泡
1.在这里我自己总结了一个冒泡小公式(基本上C语言的冒泡排序都可以用这个公式来完成):
int a[n];
//“n”值可以进行替换
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (a[j]>a[j + 1])
{
int tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
总结:
冒泡排序的原理就是两个相邻的数组进行比较,进行逐一替换。
2、二维数组的部分冒泡排序
(这个部分排序是按照每一行的数组进行排序,不打乱排序每一行内容,每一行数组是个独立的存在)
先写一个简单的二维数组三行四列【3】【4】
//先定义一个简单的二维数组[3][4]
int a[3][4]=
{
//这里暂时用字母代替每个数
//一号数组
{
a,b,c,d},
//二号数组
{
e,f,g,h},
//三号数组
{
i,k,l,m}
}
这里开始演示第一种二维数组部分冒泡排序(1、2、3号数组顺序不变,每行数组里面的数单独进行排序):
首先我们还是用随机数,随机求出一个二维数组,依然要用到这几个:
#include<time.h>
//头文件
srand((unsigned int)time);
//随机数种子
a[i][j] = rand() % 100;
//100以内的随机数
用for()循环嵌套,随机写出一个【3】【4】二维数组:
srand((unsigned int)time);
int a[3][4];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
a[i][j] = rand() % 100;
printf("a[%d][%d]=%d \n",i,j ,a[i][j]);
}
}
接下来我们拥有二维数组【3】【4】后我们开始逐一对它们进行排序,我们先排序第一行{a,b,c,d},用到一维数组冒泡排序法排序,紧接着第二行{e,f,g,h},第三行{i,k,l,m},所以我们用一个简单的for()循环:
for (int z = 0; z < 3; z++)
//z代表数组a的每一行
来一步一步的输出每一行已经排序好的数组,
最后printf()打印出来已经排序好的全部二维数组。
所以整体函数是这样的:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
int main(void)
{
srand((unsigned int)time);
int a[3][4];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
a[i][j] = rand() % 100;
printf("a[%d][%d]=%d \n",i,j ,a[i][j]