1. 冒泡排序 (Bubble Sort)
概述: 冒泡排序是一种简单的排序算法,通过多次遍历待排序的数组,比较相邻元素并将较大的元素逐步“冒泡”到末尾。
优缺点:
- 优点:
- 实现简单,容易理解。
- 稳定排序。
- 缺点:
- 平均和最坏时间复杂度为 O(n²),效率较低。
应用场景:
- 适合小规模数据的排序。
代码示例(C#):
using System;
class Program
{
static void BubbleSort(int[] arr)
{
int n = arr.Length;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
static void Main()
{
int[] arr = { 64, 34, 25, 12, 22, 11, 90 };
BubbleSort(arr);
Console.WriteLine(string.Join(", ", arr)); // 输出排序后的数组
}
}
2. 快速排序 (Quick Sort)
概述: 快速排序使用分治法策略,选择一个“基准”元素,将数组划分为两个子数组,然后递归地对这两个子数组进行排序。
优缺点:
- 优点:
- 平均时间复杂度为 O(n log n),性能优越。
- 缺点:
- 最坏情况下时间复杂度为 O(n²)。
- 不稳定排序。
应用场景:
- 适合大规模数据的排序。
代码示例(C#):
using System;
class Program
{
static void QuickSort(int[] arr, int left, int right)
{
if (left < right)
{
int pivotIndex = Partition(arr, left, right);
QuickSort(arr, left, pivotIndex - 1);
QuickSort(arr, pivotIndex + 1, right);
}
}
static int Partition(int[] arr, int left, int right)
{
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++)
{
if (arr[j] < pivot)
{
i++;
// 交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准元素放到正确的位置
int temp1 = arr[i + 1];
arr[i + 1] = arr[right];
arr[right] = temp1;
return i + 1;
}
static void Main()
{
int[] arr = { 64, 34, 25, 12, 22, 11, 90 };
QuickSort(arr, 0, arr.Length - 1);
Console.WriteLine(string.Join(", ", arr)); // 输出排序后的数组
}
}
3. 二分查找 (Binary Search)
概述: 二分查找是一种高效的查找算法,用于已排序数组,通过每次将查找范围减半,来快速找到目标元素。
优缺点:
- 优点:
- 时间复杂度为 O(log n),查找效率高。
- 缺点:
- 仅适用于已排序的数据。
应用场景:
- 大规模已排序数据中的查找。
代码示例(C#):
using System;
class Program
{
static int BinarySearch(int[] arr, int target)
{
int left = 0, right = arr.Length - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == target)
{
return mid; // 找到目标
}
else if (arr[mid] < target)
{
left = mid + 1; // 查找右半边
}
else
{
right = mid - 1; // 查找左半边
}
}
return -1; // 未找到目标
}
static void Main()
{
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int target = 5;
int result = BinarySearch(arr, target);
Console.WriteLine(result); // 输出结果:4(目标元素的索引)
}
}
git上也都有这些简单算法题,后续我也会更新其他算法题
Gitee链接:https://gitee.com/telldream/basic-algorithm-questions