首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言实现几种经典算法。

大家好,我是贤弟!

一、前言

C语言是一种被广泛应用的编程语言,它不仅用于应用程序开发,还广泛应用于算法设计和优化。在本文中,我们将介绍几种常见算法的C语言实现方法,包括排序算法、查找算法和加密算法等。

二、排序算法

排序算法是计算机科学中最重要的概念之一。其主要目的是将一组无序的数据按照一定的规则进行排列,以便更快地查找和访问。常见的排序算法有:冒泡排序、选择排序、插入排序、归并排序、快速排序等等。

1.冒泡排序

冒泡排序是一种简单的排序算法,它通过多次比较相邻的两个元素,并在必要时交换它们的位置来进行排序。该算法的时间复杂度为O(n²)。

C语言代码实现:

void BubbleSort(int *a, int n){ int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } }}

2.选择排序

选择排序是一种简单直观的排序算法。它的主要思想是:首先选择最小的元素,接着与第一个元素交换位置,然后在剩下的元素中再选择最小的元素,接着与第二个元素交换位置,以此类推。该算法的时间复杂度为O(n²)。

C语言代码实现:

void SelectionSort(int *a, int n){ int i, j, min, temp; for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) { if (a[j] < a[min]) min = j; } if (min != i) { temp = a[i]; a[i] = a[min]; a[min] = temp; } }}

3.插入排序

插入排序也是一种简单且常用的排序算法。其基本思路是将一组数据分成已排序区间和未排序区间,然后逐个把未排序区间中的元素插入到已排序区间中,直到整个序列有序。该算法的时间复杂度为O(n²)。

C语言实现:

void InsertionSort(int *a, int n){ int i, j, temp; for (i = 1; i < n; i++) { temp = a[i]; for (j = i - 1; j >= 0 && a[j] > temp; j--) a[j + 1] = a[j]; a[j + 1] = temp; }}

4.归并排序

归并排序是一种高效且稳定的排序算法。其基本思路是将原始数组不断拆分成小的子数组,直到每个子数组只有一个元素,然后再将这些子数组按照顺序合并成较大的数组,最终形成一个有序的数组。该算法的时间复杂度为O(nlogn)。

C语言代码实现:

void Merge(int *a, int left, int mid, int right){ int n1 = mid - left + 1; int n2 = right - mid;

int L[n1], R[n2]; int i, j, k;

for (i = 0; i < n1; i++) L[i] = a[left + i]; for (j = 0; j < n2; j++) R[j] = a[mid + 1 + j];

i = 0; j = 0; k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) { a[k] = L[i]; i++; } else { a[k] = R[j]; j++; } k++; }

while (i < n1) { a[k] = L[i]; i++; k++; }

while (j < n2) { a[k] = R[j]; j++; k++; }}

void MergeSort(int *a, int left, int right){ if (left >= right) return; int mid = left + (right - left) / 2; MergeSort(a, left, mid); MergeSort(a, mid + 1, right); Merge(a, left, mid, right);}

5.快速排序

快速排序是一种常见的排序算法,其基本思想是通过分治的方式,将原始数组划分成两个子数组,其中一个子数组的所有元素都小于另一个子数组,然后递归处理两个子数组。该算法的时间复杂度为O(nlogn)。

C语言代码实现:

void QuickSort(int *a, int left, int right){ if (left >= right) return;

int i = left; int j = right; int pivot = a[left];

while (i < j) { while (i < j && a[j] >= pivot) j--; if (i < j) a[i++] = a[j];

while (i < j && a[i] <= pivot) i++; if (i < j) a[j--] = a[i]; }

a[i] = pivot; QuickSort(a, left, i - 1); QuickSort(a, i + 1, right);}

三、查找算法

查找算法是计算机科学中的重要组成部分之一,其主要目的是在一组数据中查找是否存在特定的元素。常见的查找算法有:顺序查找、二分查找、散列表等等。

1.顺序查找

顺序查找也称为线性查找,其基本思路是逐个遍历待查询的数组中的元素,直到找到目标元素或者遍历完所有元素。该算法的时间复杂度为O(n)。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OEYyfQEwWiog5HnUJUw-qiVA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券