一、查找算法
1. 线性查找(Linear Search)
原理: 逐个比较数组元素,直到找到匹配项或遍历完整个数组。
应用: 适用于小型未排序数组的查找。
C实现:
int linearSearch(int arr[], int n, int target) {
for(int i = 0; i < n; i++) {
if(arr[i] == target) {
return i;
}
}
return -1; // 未找到
}
2. 二分查找(Binary Search)
原理: 仅适用于有序数组,将查找范围缩小为一半,直到找到匹配项或范围为空。
应用: 适用于大型有序数组的快速查找。
C实现:
int binarySearch(int arr[], int left, int right, int target) {
while(left <= right) {
int mid = left + (right - left) / 2;
if(arr[mid] == target) {
return mid;
}
if(arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 未找到
}
二、排序算法
1. 冒泡排序(Bubble Sort)
原理: 相邻元素比较和交换,每轮将最大元素移到末尾。
应用: 适用于小型数组的简单排序。
C实现:
void bubbleSort(int arr[], int n) {
for(int i = 0; i < n-1; i++) {
for(int j = 0; j < n-i-1; j++) {
if(arr[j] > arr[j+1]) {
// 交换
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2. 快速排序(Quick Sort)
原理: 选择基准元素,将数组分为小于和大于基准的两部分,递归排序子数组。
应用: 适用于大型数组的高效排序。
C实现:
void quickSort(int arr[], int low, int high) {
if(low < high) {
int pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for(int j = low; j <= high - 1; j++) {
if(arr[j] < pivot) {
i++;
// 交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 交换
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return (i + 1);
}
结论
本文深入探讨了查找算法和排序算法的原理、应用场景,并提供了详细的C语言实现。这些算法是数据结构领域的基础,了解它们的原理并实际编程实现有助于提高编程技能和解决实际问题的能力。在实际应用中,选择合适的查找和排序算法对程序的性能至关重要。希望本文能够帮助读者更好地理解和运用数据结构中的经典算法。