C语言基础算法

C语言基础算法

前言

算法学习在编程学习中是必不可少的。而算法是一组用于解决问题的指令,它们按照一定的规则执行,以达到预期的结果。在计算机科学中,算法是解决问题的基础,因为计算机只能执行程序中的指令。因此,编写高效的算法对于编写高效的程序至关重要。


一、常见的C语言算法

1. 排序算法

排序算法是将一组数据按照一定的规则排列的算法。

a. 冒泡排序

冒泡排序的基本思想是比较相邻的元素,如果前一个元素比后一个元素大,则交换它们的位置。重复这个过程,直到整个序列有序。

C语言实现:

void bubble_sort(int arr[], int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        for (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;
            }
        }
    }
}

b. 选择排序

选择排序的基本思想是在未排序的序列中找到最小的元素,将它放到序列的起始位置,然后再从剩余的未排序的序列中找到最小的元素,放到已排序的序列的末尾。重复这个过程,直到整个序列有序。

C语言实现:

void selection_sort(int arr[], int n) {
    int i, j, min_idx, temp;
    for (i = 0; i < n - 1; i++) {
        min_idx = i;
        for (j = i + 1; j < n; j++) {
            if (arr[j] < arr[min_idx]) {
                min_idx = j;
            }
        }
        temp = arr[i];
        arr[i] = arr[min_idx];
        arr[min_idx] = temp;
    }
}

c. 插入排序

插入排序的基本思想是将一个元素插入到已排序的序列中的正确位置。重复这个过程,直到整个序列有序。

C语言实现:

void insertion_sort(int arr[], int n) {
    int i, j, temp;
    for (i = 1; i < n; i++) {
        temp = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > temp) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = temp;
    }
}

d. 快速排序

快速排序是一种高效的排序算法,它的基本思想是选择一个基准元素,将序列分为两部分,一部分是小于基准元素的,另一部分是大于基准元素的。然后对这两部分分别进行快速排序,最终得到一个有序的序列。

C语言实现:

void quick_sort(int arr[], int left, int right) {
    if (left < right) {
        int i = left, j = right, pivot = arr[left];
        while (i < j) {
            while (i < j && arr[j] >= pivot) j--;
            if (i < j) arr[i++] = arr[j];
            while (i < j && arr[i] < pivot) i++;
            if (i < j) arr[j--] = arr[i];
        }
        arr[i] = pivot;
        quick_sort(arr, left, i - 1);
        quick_sort(arr, i + 1, right);
    }
}

2. 查找算法

查找算法是在一组数据中查找指定数据的算法。

a. 线性查找

线性查找是一种简单的查找算法,它的基本思想是从序列的起始位置开始,逐个比较每个元素,直到找到目标元素或者遍历完整个序列。

C语言实现:

int linear_search(int arr[], int n, int target) {
    int i;
    for (i = 0; i < n; i++) {
        if (arr[i] == target) {
            return i;
        }
    }
    return -1;
}

b. 二分查找

二分查找是一种高效的查找算法,它的基本思想是将有序序列分成两部分,然后判断目标元素在哪一部分中,再在该部分中进行查找。重复这个过程,直到找到目标元素或者确定目标元素不存在。

C语言实现:

int binary_search(int arr[], int n, int target) {
    int left = 0, right = n - 1, mid;
    while (left <= right) {
        mid = (left + right) / 2;
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

c. 插值查找

插值查找是一种基于二分查找的优化算法,它的基本思想是根据目标元素的值,将有序序列分成更小的部分。具体来说,它使用目标元素与序列中第一个元素和最后一个元素的比较来确定目标元素大致的位置,然后在该位置附近进行查找。

C语言实现:

int interpolation_search(int arr[], int n, int target) {
    int left = 0, right = n - 1, pos;
    while (left <= right && target >= arr[left] && target <= arr[right]) {
        pos = left + (target - arr[left]) * (right - left) / (arr[right] - arr[left]);
        if (arr[pos] == target) {
            return pos;
        } else if (arr[pos] < target) {
            left = pos + 1;
        } else {
            right = pos - 1;
        }
    }
    return -1;
}

3. 字符串操作算法

字符串操作算法是对字符串进行处理的算法。

a.字符串长度

字符串长度是指字符串中字符的个数。C语言中可以使用strlen函数来计算字符串长度。

C语言实现:

#include <string.h>

int main() {
    char str[] = "hello world";
    int len = strlen(str);
    printf("The length of the string is %d\n", len);
    return 0;
}

b. 字符串复制

字符串复制是指将一个字符串的内容复制到另一个字符串中。C语言中可以使用strcpy函数来实现字符串复制。

C语言实现:

#include <string.h>

int main() {
    char str1[] = "hello world";
    char str2[100];
    strcpy(str2, str1);
    printf("The copied string is %s\n", str2);
    return 0;
}

c. 字符串连接

字符串连接是指将两个字符串合并为一个字符串。C语言中可以使用strcat函数来实现字符串连接。

C语言实现:

#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "world";
    strcat(str1, str2);
    printf("The concatenated string is %s\n", str1);
    return 0;
}

d. 字符串比较

字符串比较是指比较两个字符串的大小关系。C语言中可以使用strcmp函数来实现字符串比较。

C语言实现:

#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "world";
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("The two strings are equal\n");
    } else if (result < 0) {
        printf("The first string is smaller than the second string\n");
    } else {
        printf("The first string is larger than the second string\n");
    }
    return 0;
}

4. 图形算法

图形算法是用于处理图形数据的算法。

a. 线段绘制

线段绘制是指在屏幕上绘制一条直线。C语言中可以使用Bresenham算法来实现线段绘制。

C语言实现:

#include <graphics.h>

int main() {
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    int x1 = 100, y1 = 100, x2 = 300, y2 = 300;
    int dx = abs(x2 - x1), dy = abs(y2 - y1);
    int sx = x1 < x2 ? 1 : -1, sy = y1 < y2 ? 1 : -1;
    int err = dx - dy, e2;
    while (x1 != x2 || y1 != y2) {
        putpixel(x1, y1, WHITE);
        e2 = 2 * err;
        if (e2 > -dy) {
            err -= dy;
            x1 += sx;
        }
        if (e2 < dx) {
            err += dx;
            y1 += sy;
        }
    }
    getch();
    closegraph();
    return 0;
}

b. 圆形绘制

圆形绘制是指在屏幕上绘制一个圆形。C语言中可以使用中点圆算法来实现圆形绘制。

C语言实现:

#include <graphics.h>

int main() {
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    int x0 = 300, y0 = 300, r = 100;
    int x = 0, y = r;
    int d = 1 - r;
    while (x <= y) {
        putpixel(x0 + x, y0 + y, WHITE);
        putpixel(x0 + x, y0 - y, WHITE);
        putpixel(x0 - x, y0 + y, WHITE);
        putpixel(x0 - x, y0 - y, WHITE);
        putpixel(x0 + y, y0 + x, WHITE);
        putpixel(x0 + y, y0 - x, WHITE);
        putpixel(x0 - y, y0 + x, WHITE);
        putpixel(x0 - y, y0 - x, WHITE);
        if (d < 0) {
            d += 2 * x + 3;
        } else {
            d += 2 * (x - y) + 5;
            y--;
        }
        x++;
    }
    getch();
    closegraph();
    return 0;
}

c. 矩形绘制

矩形绘制是指在屏幕上绘制一个矩形。C语言中可以使用rectangle函数来实现矩形绘制。

C语言实现:

#include <graphics.h>

int main() {
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    int x1 = 100, y1 = 100, x2 = 300, y2 = 300;
    rectangle(x1, y1, x2, y2);
    getch();
    closegraph();
    return 0;
}

三、结论

C语言算法是计算机科学中不可或缺的一部分。了解基础的算法知识和常见的算法可以帮助我们更好地理解计算机科学中的问题,并编写高效的程序。同时,C语言算法在各个领域都有广泛的应用,是计算机科学中不可或缺的一部分。

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值