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;

}

相关推荐
化雨成烟6 分钟前
linux基础命令2
linux·运维·服务器
运维踩坑日记6 分钟前
OpenStack 核心服务实战笔记
linux·运维·服务器·笔记·openstack
且撷相思红豆枝12 分钟前
Simulink学习笔记(一)
笔记·学习·matlab
weixin_4487717213 分钟前
Spring框架之ApplicationContext源码学习
java·学习·spring
浪潮BB机14 分钟前
2026考研网课录音转复习笔记工具实测横评
笔记·语音识别·效率工具·ai工具·录音转写·会议纪要
滴啦嘟啦哒16 分钟前
【具身笔记】【Piper+PI0.5】三、探究失败原因
笔记·python·vla·具身
闻缺陷则喜何志丹18 分钟前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
erzong23119 分钟前
Linux操作系统:线程池&踩坑修复
linux·运维·算法
云计算练习生30 分钟前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
1314lay_100738 分钟前
MESSAGE ‘採購單不存在‘(005) TYPE ‘S‘ DISPLAY LIKE ‘E‘.
经验分享·笔记