【Leecode 随笔】C语言版看了不后悔系列持续更新中。。。(二)

在这里插入图片描述

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

题目一:数组元素的和

题目描述:

给定一个整数数组,计算数组中所有元素的和,并返回这个和。

题目分析:

这是一个基础的数组遍历与累加问题。我们需要遍历数组中的每一个元素,将它们逐一相加,最终得到数组元素的总和。此问题的时间复杂度为O(n),其中n为数组的长度。

解题思路:

初始化一个变量(如sum)为0,用于存储数组元素的和。
使用循环(如for循环)遍历数组的每个元素。
在循环体内,将当前元素累加到sum变量上。
循环结束后,sum变量中存储的即为数组元素的总和。
返回或输出sum变量。

示例代码:

#include <stdio.h>  
  
// 函数声明:计算数组元素的和  
int calculateSum(int arr[], int n);  
  
int main() {  
    // 示例数组  
    int arr[] = {1, 2, 3, 4, 5};  
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度  
    int sum = calculateSum(arr, n); // 调用函数计算数组元素的和  
    printf("数组元素的和是:%d\n", sum);  
    return 0;  
}  
  
// 函数定义:计算数组元素的和  
int calculateSum(int arr[], int n) {  
    int sum = 0; // 初始化sum为0  
    for (int i = 0; i < n; i++) { // 遍历数组的每个元素  
        sum += arr[i]; // 将当前元素累加到sum上  
    }  
    return sum; // 返回数组元素的和  
}

代码讲解:

calculateSum函数接受一个整数数组arr和数组长度n作为参数,返回数组元素的和。
在main函数中,我们定义了一个示例数组,并计算了其长度。
通过调用calculateSum函数,我们得到了数组元素的和,并使用printf函数将其输出。
calculateSum函数内部,我们初始化了一个sum变量为0,并使用for循环遍历数组的每个元素,将其累加到sum上。
最后,calculateSum函数返回sum变量的值。

题目二:冒泡排序算法实现

题目描述:

实现冒泡排序算法,对给定的整数数组进行排序,使其元素按照从小到大的顺序排列。

题目分析:

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数组的工作是重复进行的,直到没有再需要交换的元素为止。此算法的时间复杂度在最坏情况下为O(n^2),其中n为数组的长度。

解题思路:

定义一个布尔变量(如swapped),用于标记在一轮比较中是否发生过元素交换。
使用两层循环实现冒泡排序:
外层循环控制排序的轮数,共需n-1轮(n为数组长度)。
内层循环用于在当前轮次中比较相邻元素,并进行必要的交换。
在内层循环中,如果当前元素大于下一个元素,则交换它们,并将swapped设置为true。
如果在一轮比较结束后,swapped仍为false,说明数组已经有序,可以提前结束排序。
排序完成后,数组中的元素将按照从小到大的顺序排列。
示例代码:

#include <stdio.h>  
  
// 函数声明:冒泡排序算法实现  
void bubbleSort(int arr[], int n);  
  
int main() {  
    // 示例数组  
    int arr[] = {64, 34, 25, 12, 22, 11, 90};  
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度  
    bubbleSort(arr, n); // 调用函数对数组进行排序  
    printf("排序后的数组是:\n");  
    for (int i = 0; i < n; i++) { // 输出排序后的数组  
        printf("%d ", arr[i]);  
    }  
    printf("\n");  
    return 0;  
}  
  
// 函数定义:冒泡排序算法实现  
void bubbleSort(int arr[], int n) {  
    int temp; // 用于交换元素的临时变量  
    for (int i = 0; i < n - 1; i++) { // 控制排序轮数  
        int swapped = 0; // 标记是否发生过交换  
        for (int j = 0; j < n - i - 1; j++) { // 在当前轮次中比较相邻元素  
            if (arr[j] > arr[j + 1]) { // 如果当前元素大于下一个元素  
                temp = arr[j]; // 交换元素  
                arr[j] = arr[j + 1];  
                arr[j + 1] = temp;  
                swapped = 1; // 标记发生了交换  
            }  
        }  
        if (swapped == 0) { // 如果没有发生过交换,说明数组已经有序  
            break; // 提前结束排序  
        }  
    }  
}

代码讲解:

bubbleSort函数接受一个整数数组arr和数组长度n作为参数,对数组进行排序。
在main函数中,我们定义了一个示例数组,并计算了其长度。
通过调用bubbleSort函数,我们对数组进行了排序。
排序完成后,我们使用for循环输出排序后的数组。
bubbleSort函数内部,我们使用了两层for循环实现冒泡排序。
在内层循环中,我们比较相邻元素,并在需要时交换它们。
我们使用swapped变量来检测是否发生过交换,以便在数组已经有序时提前结束排序。

题目三:二分查找算法实现

题目描述:

实现二分查找算法,在一个有序整数数组中查找指定的目标值,如果找到则返回其索引,否则返回-1。

题目分析:

二分查找是一种高效的查找算法,它只能用于已经排好序的数组。该算法通过比较目标值与数组中间元素的大小,逐步缩小搜索范围,直到找到目标值或搜索范围为空。此算法的时间复杂度为O(log n),其中n为数组的长度。

解题思路:

初始化两个指针(如left和right),分别指向数组的起始位置和结束位置。
使用循环进行查找,直到left大于right为止:
计算中间位置mid,为left和right的平均值(向下取整)。
比较目标值与数组中mid位置的元素:
如果相等,则返回mid。
如果目标值小于数组中mid位置的元素,则更新right为mid - 1,继续在左半部分查找。
如果目标值大于数组中mid位置的元素,则更新left为mid + 1,继续在右半部分查找。
如果循环结束时仍未找到目标值,则返回-1。

示例代码:

#include <stdio.h>  
  
// 函数声明:二分查找算法实现  
int binarySearch(int arr[], int n, int target);  
  
int main() {  
    // 示例有序数组  
    int arr[] = {11, 12, 22, 25, 34, 64, 90};  
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度  
    int target = 25; // 目标值  
    int index = binarySearch(arr, n, target); // 调用函数进行二分查找  
    if (index != -1) { // 如果找到了目标值  
        printf("目标值%d在数组中的索引是:%d\n", target, index);  
    } else { // 如果没有找到目标值  
        printf("目标值%d不在数组中\n", target);  
    }  
    return 0;  
}  
  
// 函数定义:二分查找算法实现  
int binarySearch(int arr[], int n, int target) {  
    int left = 0; // 初始化左指针  
    int right = n - 1; // 初始化右指针  
    while (left <= right) { // 使用循环进行查找  
        int mid = left + (right - left) / 2; // 计算中间位置(向下取整)

✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值