当前位置:   article > 正文

C语言经典算法之简单选择排序算法

C语言经典算法之简单选择排序算法

目录

前言

建议:

简介:

一、代码实现

二、时空复杂度:

时间复杂度:

空间复杂度:

三、算法的特性:

四、总结


前言

建议:

1.学习算法最重要的是理解算法的每一步,而不是记住算法。

           2.建议读者学习算法的时候,自己手动一步一步地运行算法。

简介:

简单选择排序是一种基本的排序算法,其思想是每次从未排序的部分选择最小(或最大)的元素,将其放在已排序部分的末尾。

一、代码实现

  1. #include <stdio.h>
  2. // 简单选择排序函数
  3. void selectionSort(int arr[], int n) {
  4. int i, j, min_idx;
  5. // 外层循环控制每一轮选择最小元素的起始位置
  6. for (i = 0; i < n - 1; i++) {
  7. // 假设当前起始位置的元素为最小
  8. min_idx = i;
  9. // 内层循环找到未排序部分的最小元素的索引
  10. for (j = i + 1; j < n; j++) {
  11. if (arr[j] < arr[min_idx]) {
  12. min_idx = j;
  13. }
  14. }
  15. // 交换找到的最小元素与起始位置的元素
  16. int temp = arr[min_idx];
  17. arr[min_idx] = arr[i];
  18. arr[i] = temp;
  19. }
  20. }
  21. // 打印数组元素
  22. void printArray(int arr[], int size) {
  23. for (int i = 0; i < size; i++) {
  24. printf("%d ", arr[i]);
  25. }
  26. printf("\n");
  27. }
  28. int main() {
  29. int arr[] = {64, 25, 12, 22, 11};
  30. int n = sizeof(arr) / sizeof(arr[0]);
  31. printf("原始数组:\n");
  32. printArray(arr, n);
  33. // 调用简单选择排序函数
  34. selectionSort(arr, n);
  35. printf("排序后的数组:\n");
  36. printArray(arr, n);
  37. return 0;
  38. }

二、时空复杂度:

时间复杂度

最好情况最坏情况平均情况下的时间复杂度都是O(n^2),因为在每一轮都需要找到未排序部分的最小元素。


空间复杂度

简单选择排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为O(1)

三、算法的特性:

不稳定性

简单选择排序是不稳定的排序算法,即相同元素的相对位置在排序后可能发生变化。


 比较次数

简单选择排序的比较次数与输入数据的初始状态无关,总的比较次数为(n-1) + (n-2) + ... + 1 = n(n-1)/2。


 交换次数

简单选择排序的交换次数相对较少,最多为n-1次。

四、总结

简单选择排序是一种直观易懂的排序算法,适用于小规模数据集或者对排序稳定性不敏感的场景。但在实际应用中,对于大规模数据集,更高效的排序算法通常更受青睐。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/39743
推荐阅读
相关标签
  

闽ICP备14008679号