【C语言】冒泡排序

将数组A中的内容和数组B中的内容进行交换。(数组一样大)


//将数组A中的内容和数组B中的内容进行交换(数组一样大)
/*
* 此题的关键在于数值的交换,应定义一个数组来暂存数值,
* 再利用循环依次交换
*/
int main()
{
    //定义两个数组并赋值
    int arr1[] = { 1,2,3 };
    int arr2[] = { 3,2,1 };
    //求出任意数组总元素大小
    int sz = sizeof(arr1) / sizeof(arr1[0]);
    //利用数组下标进行值交换
    int i = 0;
    //定义变量暂存数值
    int tmp[3];
    for (i = 0; i <= sz; i++)//依次交换数值
    {
        tmp[i] = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = tmp[i];
    }
    printf("交换后arr1:");
    for (i = 0; i < sz; i++)//打印交换后的arr1值
    {
        printf("%d ", arr1[i]);
    }
    printf("\n");//换行,让结果更加明了
    printf("交换后arr2:");
    for (i = 0; i < sz; i++)//打印交换后的arr2值
    {
        printf("%d ", arr2[i]);
    }
    return 0;
}

创建一个整形数组,完成对数组的操作

  1. 实现函数init() 初始化数组为全0

  1. 实现print() 打印数组的每个元素

  1. 实现reverse() 函数完成数组元素的逆置。

要求:自己设计以上函数的参数,返回值。

代码如下:


/*创建一个整形数组,完成对数组的操作
1.实现函数init() 初始化数组为全0
2.实现print()  打印数组的每个元素
3.实现reverse()  函数完成数组元素的逆置。
要求:自己设计以上函数的参数,返回值。
*/
void reverse(int arr[], int sz)
{
    //定义变量,利用循环实现数组逆序
    int i = 0;
    printf("arr数组逆置后:");
    for (i = sz - 1; i >= 0; i--)
    {
        printf("%d ", arr[i]);
    }
}
void print(int arr[], int sz)
{
    //创建变量,利用循环打印每个元素
    int i = 0;
    printf("arr数组逆置前:");
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    //调用函数完成数组元素的逆置
    reverse(arr, sz);
}
void init(int arr[], int sz)
{
    //定义变量,利用循环初始化数组
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        scanf("%d", &arr[i]);
    }
    //调用函数打印数组每个元素
    print(arr, sz);
}
int main()
{
    //创建一个整型数组
    int arr[3] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);//数组总个数
    //调用init函数,对数组初始化
    init(arr,sz);
    return 0;
}

实现一个对整形数组的冒泡排序


//实现一个对整形数组的冒泡排序
/*
* 题解:
* 冒泡排序:
* 依次和相邻的数字对比,对比后,较小的数字依次交换后(升序)
* 形成从小到大有序排放
* 解题关键:
* 1.当我们将数字两两比较时,那我们要比较的次数就为n(总个数)-1次.
* 也就代表我们要循环n(总个数)-1趟比较.
* 2.当我们将数字从头到尾比较一趟后,就能交换出正确的数字,则我们
* 再进行下一趟比较时,就得-1.
*/
int main()
{
    //定义数组
    int arr[] = { 3,2,9,6,5,7,1,8,4,10 };
    //计算元素个数
    int sz = sizeof(arr) / sizeof(arr[0]);
    //定义数组作为暂存.
    int tmp[10] = { 0 };
    int i = 0;
    for (i = 0; i < sz-1; i++)//外循环为总共要进行多少趟
    {
        //定义j变量,实现每一趟比较
        int j = 0;
        for (j = 0; j < sz-1-i; j++)//内循环为每一趟的比较,j<sz-1-i为每一趟都解决掉一个数字,
        {                            //因此利用i变量的值,实现每一趟-1的效果    
            if (arr[j] > arr[j + 1])
            {
                tmp[j] = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp[j];
            }
        }    
    }    
    //打印数字
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值