C题目11:数组a[m]排序

每日小语

双手,且放下一切劳作,前额,也忘掉忧思,此时此刻我所有的感觉就想沉入安睡。

自己敲写

这个问题老师上课讲了一种方法,叫做冒泡排序。基本思想是

1.找最小值,放到a0

2.从a1~a3找最小值,放到a1

自己敲写的时候,问题首先出在了如何设置一个初始变量上

复制代码
int arr[5] = {10, 20, 30, 40, 50};

#include <stdio.h>

int main() 
{
    int a[5]={1,4,3,5,2};
    for(int i=0;i>0;i++)
    {
        for(int j=1;j>0;j++)
        {
            if (a[i]>a[j])
            {
                a[i]=a[j];
                a[j]=a[i];
            }
        }
    }
    printf(a);
    return 0;
}

目前代码。问题很多。

复制代码
#include <stdio.h>

int main() 
{
    int a[5] = {1, 4, 3, 5, 2};
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    printf("Sorted Array: %d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
    return 0;
}
  1. 在外层循环中,i 应该从0开始递增,而不是 i>0。循环条件应为 i<4,因为数组长度为5,下标从0到4。

  2. 在内层循环中,j 应该从0开始递增,而不是 j>0。循环条件应为 j<4

  3. 在交换数组元素的部分,应该是先将较大的元素赋值给临时变量,然后再将较小的元素赋值给较大的元素,最后再将临时变量赋值给较小的元素。

  4. 在使用 printf 输出数组时,需要提供一个格式字符串,例如 "Array: %d %d %d %d %d\n",并提供要输出的数组元素。

  5. 问题还是出在循环,两层循环理解不当。

    当使用冒泡排序算法时,两层嵌套循环的作用是进行比较和交换操作,以便将较大的元素逐步移动到数组的末尾。以下是两层循环的具体作用:

    1. **外层循环(i循环):** 外层循环负责控制每一轮的比较和交换操作。对于长度为 n 的数组,需要进行 n-1 轮比较,确保数组中的所有元素都被正确地排序。外层循环的索引变量通常用 i 表示。

    ```c

    for (int i = 0; i < 4; i++)

    {

    // 内层循环将执行比较和交换操作

    }

    ```

    1. **内层循环(j循环):** 内层循环负责实际的比较和交换操作。在每一轮外层循环中,内层循环从数组的起始位置开始,依次比较相邻的两个元素,并根据需要进行交换。内层循环的索引变量通常用 j 表示。

    ```c

    for (int j = 0; j < 4 - i; j++)

    {

    // 比较和交换操作

    }

    ```

    • `4 - i` 是因为在每一轮外层循环之后,数组的末尾已经是当前轮次中最大的元素,不再需要比较和交换。因此,内层循环的范围在逐渐减小。

    • 比较相邻元素,如果前一个元素大于后一个元素,则交换它们的位置,以确保较大的元素向数组的末尾移动。

    整体来说,两层循环共同工作,通过多次比较和交换,将数组中较大的元素逐步移动到末尾,实现排序的目的。这就是冒泡排序算法的基本思想。

相关推荐
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-17 爬动的蠕虫(C语言实现)
c语言·开发语言·数据结构·算法
麻瓜老宋14 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
SilentSlot18 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
冻柠檬飞冰走茶20 小时前
PTA基础编程题目集 7-15 计算圆周率(C语言实现)
c语言·开发语言·数据结构·算法
Rabitebla1 天前
C++ 内存管理全面复习:从内存分布到 operator new/delete
java·c语言·开发语言·c++·算法·leetcode
SilentSlot1 天前
【C/C++】手写 DPDK 协议栈(八):用五元组 Hash 加速连接定位
c语言·c++·哈希算法
Tisfy1 天前
LeetCode 3517.最小回文排列 I:排序(Python两行版) / 计数(O(n)时间+O(C)空间+字符串原地修改)
c语言·python·leetcode·字符串·排序·计数排序·回文
菜鸟的升级路1 天前
C语言栈刷题:LeetCode 20 有效的括号完整解题笔记
c语言·笔记·leetcode
冻柠檬飞冰走茶1 天前
PTA基础编程题目集 7-13 日K蜡烛图(C语言实现)
c语言·开发语言·数据结构·算法
SilentSlot1 天前
【C/C++】手写 DPDK 协议栈(十二):TCP 并发与自实现 epoll 的就绪事件分发
c语言·c++·tcp/ip