c语言学习笔记:排序与查找方法整理

排序与查找是c语言中非常重要的算法,今天复习后,整理了一些相关的知识点。

一、排序

1、选择排序:每轮选出最小元素,放到已排序区间末尾

时间复杂度:O(n²)

空间复杂度:O(1) 不稳定

void selectionSort(int arr\[\], int n) {

for (int i = 0; i < n - 1; i++) {

int minIndex = i;

for (int j = i + 1; j < n; j++) {

if (arrj < arrminIndex) {

minIndex = j;

}

}

if (minIndex != i) {

swap(&arri, &arrminIndex);

}

}

}

2、冒泡排序:相邻元素两两比较,大的往后"冒泡"

时间复杂度:O(n²)

空间复杂度:O(1) 稳定

void bubbleSort(int arr\[\], int n) {

for (int i = 0; i < n - 1; i++) {

int swapped = 0; // 优化:本轮是否发生交换

for (int j = 0; j < n - 1 - i; j++) {

if (arrj > arrj + 1) {

swap(&arrj, &arrj + 1);

swapped = 1;

}

}

if (!swapped) break; // 没有交换说明已有序

}

}

3、插入排序:将未排序元素插入到已排序区间的合适位置

时间复杂度:O(n²)

空间复杂度:O(1) 稳定

void insertionSort(int arr\[\], int n) {

for (int i = 1; i < n; i++) {

int key = arri;

int j = i - 1;

while (j >= 0 && arrj > key) {

arrj + 1 = arrj;

j--;

}

arrj + 1 = key;

}

}

4、快速排序:选基准,分区,递归排序左右子数组

时间复杂度:平均 O(nlogn),最坏 O(n²)

空间复杂度:O(logn) 不稳定

int partition(int arr\[\], int low, int high) {

int pivot = arrhigh; // 取最后一个元素为基准

int i = low - 1; // 小于基准的区域边界

for (int j = low; j < high; j++) {

if (arrj < pivot) {

i++;

swap(&arri, &arrj);

}

}

swap(&arri + 1, &arrhigh);

return i + 1;

}

void quickSort(int arr\[\], int low, int high) {

if (low < high) {

int pi = partition(arr, low, high);

quickSort(arr, low, pi - 1);

quickSort(arr, pi + 1, high);

}

}

二、查找

二分查找:在有序数组中查找目标值

时间复杂度:O(logn) 空间复杂度:O(1)

返回目标下标,未找到返回 -1

int binarySearch(int arr\[\], int n, int target) {

int left = 0;

int right = n - 1;

while (left <= right) {

int mid = left + (right - left) / 2; // 防止溢出

if (arrmid == target) {

return mid;

} else if (arrmid < target) {

left = mid + 1;

} else {

right = mid - 1;

}

}

return -1;

}

相关推荐
别动我齐刘海1 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
狂云歌1 小时前
2025年读书回顾,AI+游戏+历史
人工智能·学习·游戏
ltl1 小时前
QUIC 协议拆解(上):为什么 TCP 改不动了
linux
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记
陈皮波比茶2 小时前
git学习
git·学习
wWYy.2 小时前
C++与C的区别
c语言·c++
浪兎兎3 小时前
Docker 容器技术笔记
笔记·docker·容器
AI备案指南-满满3 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案