选择排序(Selection Sort)是一种简单直观的排序算法,它的基本原理是每次从待排序的元素中选择最小(或最大)的元素,放到已排序部分的末尾,直到所有元素都排序完成。
以下是选择排序的基本原理:
1. 遍历待排序数组,找到数组中最小的元素,并将其与数组的第一个元素交换位置。
2. 接着,在剩下的元素中找到最小的元素,将其与数组的第二个元素交换位置。
3. 重复以上步骤,每次在剩余未排序的部分中选择最小的元素,放到已排序部分的末尾,直到整个数组排序完成。
选择排序的特点:
- 选择排序是一种不稳定的排序算法,因为在选择最小元素的过程中可能会破坏相同元素的相对位置。
- 时间复杂度为 O(n^2),其中 n 是待排序数组的元素个数。无论数组的初始状态如何,选择排序的时间复杂度都是一样的。
- 选择排序是一种原地排序算法,只需要常数级别的额外空间。
虽然选择排序的时间复杂度较高,但由于其实现简单,适合用于对于小规模数据的排序。在实际应用中,选择排序通常不是首选,而是像快速排序、归并排序等更高效的排序算法更常见。以下是用 C++ 实现选择排序的示例代码:
```cpp #include <iostream> 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 (arr[j] < arr[minIndex]) { minIndex = j; } } // Swap the found minimum element with the first element int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; } int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); std::cout << "Original array: "; printArray(arr, n); selectionSort(arr, n); std::cout << "Sorted array: "; printArray(arr, n); return 0; } ```
在这段代码中,`selectionSort` 函数实现了选择排序算法,`printArray` 函数用于打印数组的元素,`main` 函数中定义了一个整型数组并对其进行选择排序