赞
踩
目录
1.学习算法最重要的是理解算法的每一步,而不是记住算法。
2.建议读者学习算法的时候,自己手动一步一步地运行算法。
简单选择排序是一种基本的排序算法,其思想是每次从未排序的部分选择最小(或最大)的元素,将其放在已排序部分的末尾。
- #include <stdio.h>
-
- // 简单选择排序函数
- void selectionSort(int arr[], int n) {
- int i, j, min_idx;
-
- // 外层循环控制每一轮选择最小元素的起始位置
- for (i = 0; i < n - 1; i++) {
- // 假设当前起始位置的元素为最小
- min_idx = i;
-
- // 内层循环找到未排序部分的最小元素的索引
- for (j = i + 1; j < n; j++) {
- if (arr[j] < arr[min_idx]) {
- min_idx = j;
- }
- }
-
- // 交换找到的最小元素与起始位置的元素
- int temp = arr[min_idx];
- arr[min_idx] = arr[i];
- arr[i] = temp;
- }
- }
-
- // 打印数组元素
- void printArray(int arr[], int size) {
- for (int i = 0; i < size; i++) {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
-
- int main() {
- int arr[] = {64, 25, 12, 22, 11};
- int n = sizeof(arr) / sizeof(arr[0]);
-
- printf("原始数组:\n");
- printArray(arr, n);
-
- // 调用简单选择排序函数
- selectionSort(arr, n);
-
- printf("排序后的数组:\n");
- printArray(arr, n);
-
- return 0;
- }

最好情况、最坏情况和平均情况下的时间复杂度都是,因为在每一轮都需要找到未排序部分的最小元素。
简单选择排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为。
不稳定性:
简单选择排序是不稳定的排序算法,即相同元素的相对位置在排序后可能发生变化。
比较次数:
简单选择排序的比较次数与输入数据的初始状态无关,总的比较次数为(n-1) + (n-2) + ... + 1 = n(n-1)/2。
交换次数:
简单选择排序的交换次数相对较少,最多为n-1次。
简单选择排序是一种直观易懂的排序算法,适用于小规模数据集或者对排序稳定性不敏感的场景。但在实际应用中,对于大规模数据集,更高效的排序算法通常更受青睐。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。