关于冒泡循环和反转数组和行列转换

冒泡循环:

冒泡循环的实现最重要的是其中的两个for循环:

#include <stdio.h>
void bubbleSort(int arr[], int size)//S要大写
{
    for (int i = 0; i < size - 1; i++)//每一个数字都要历遍一次,直到找到最大/小那个数,size是数组中的数字个数,下标总是比数组中的数字个数小一(下标从零开始)
    {
        for (int j = 0; j < size - 1 - i;j++) //第一个for已经把最大/小的数找出来了,去掉最大/小的那个数的位置,把前面剩下的所有数字都历遍一次,为加下来的两两交换打基础
        {
            if (arr[j] > arr[j+1])//对符合比较顺序的相邻两个数进行换位
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] =  temp;
            }
        }
    }
}

1.void bubbleSort是函数名

2.void bubbleSort后括号内接的是数组类型和长度类型

3.第一个for循环用来历遍数组,先定位第一个数字,与后面的数字进行逐项比较,直到遇到比他更大或更小的数并与之换位,接着继续往后比较,直到遇到比他更大或更小的数并与之换位,以此类推,将数组中的最值逐渐往后挪至最后一位

4.第二个for循环用来进行换位和两两比较。先再次历遍数组,在第一个for中,我们已经把最值移到末尾了,接下来我们只需要历遍末端最后一个数之前的数就可以了,所以此时j=size-1-i,创建if语句对符合条件的数值进行交换

5.轮回赋值直到闭环

6.在后期引用冒泡循环的时候就不用再打void了,但是要重新用一次for循环历遍数组,把结果先存储起来再去打印

反转数组:

反转数组最重要的是体会这个方法只需要历遍一半的数组就能够把所有的数都进行换位。为什么这样说呢?

因为反转数组的换位具有对称性,第一个数与最后一个数进行换位,第二个数与次后一个数进行换位,直到最中间那个数就已经完成了所有数的换位。

上代码:

void reverseArray(int arr[], int size)
{
  for (int i = 0; i < size / 2; i++)//遍历一半的数就行了,到中间的时候就已经反转完了所有的数了
    {
        int temp = arr[i];//前后对应反转位次
        arr[i] = arr[size-i-1];
        arr[size-i-1] = temp;
    }
}

1.reverseArray就是反转数组的意思,函数名

2.数与数之间进行换位的步骤与冒泡雷同,基本上这种换位都是差不多的,理解一个基本上剩下的就没多大的问题了。

行列转换

行列转化的核心是对角线上的数字永远不挪窝,我们可以根据对角线把数组分成上下两个三角形,在进行历遍数组的时候我们只需要动其中一个三角形就行。具体情况,上代码:

#include <stdio.h>
void transpose(int arr[3][3])//第一个i=0之后进入第二个for,在第二个for里面轮回了三次之后,又返回第一个for进行轮回i=1,以此类推 
{
    for (int i = 0; i < 3; i++)//历遍数组,对其中所有的内容进行存储 
    {
        for (int j = i + 1; j < 3; j++)//遍历一半就行,对角线的数字不进行交换,只交换上下两个三角形的数字
        {
            int temp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = temp;
        

    }
}

1.void transpose同上,函数名

2.这个行列转换最重要的是理解内层循环和外层循环。第一个for可以先让i=0,然后让第二次for里的j从0,开始递增到1,2;完了之后外层for又加一,i=1,然后内层for又抡三次,然后再继续执行第一个for和第二个for。相当于每循环一次外层就循环3次内层,可以把每一个坐标都匹配完成

注意:在使用这些函数的时候要注意函数名称的拼写和大小写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值