当前位置: 首页 > news >正文

做logo什么网站河田镇建设局网站

做logo什么网站,河田镇建设局网站,深圳做网站的公司,企业网站建设企业目录 前言 一、选择排序算法原理 二、选择排序算法实现对十个数进行排序 三、代码运行示例 四、选择排序算法的时间复杂度和空间复杂度分析 五、选择排序算法的优缺点 六、总结 前言 在计算机科学领域,排序算法是基石般的存在,它们就像是整理杂乱…

目录

前言

一、选择排序算法原理

二、选择排序算法实现对十个数进行排序

三、代码运行示例

四、选择排序算法的时间复杂度和空间复杂度分析

五、选择排序算法的优缺点

六、总结


前言

        在计算机科学领域,排序算法是基石般的存在,它们就像是整理杂乱数据的魔法,让无序的数据变得井井有条。而选择排序(Selection Sort),作为一种简单直观的排序算法,在学习排序的道路上是我们绕不开的经典算法之一。今天,我们一起探讨如何使用 C 语言实现选择排序算法,对十个数字进行排序,并详细剖析其中的原理与细节。

一、选择排序算法原理

        选择排序的核心思想可以用 “挑最小的放前面” 来概括。它的执行过程就像是在一群学生中,先找出最矮的学生站到队伍最前面,然后在剩下的学生中再找出最矮的,依次类推,直到整个队伍按照身高从矮到高排列整齐。

        具体到数字排序上,在一个包含 n 个元素的数组中,选择排序会在每一轮遍历中,从待排序的元素中找出最小(或最大)的元素,将其与待排序序列的起始位置元素交换位置。每完成一轮遍历,就会有一个元素被放置到它最终的正确位置上,经过 n - 1 轮遍历后,整个数组就完成了排序。

        例如,对于数组[5, 3, 8, 6, 7],第一轮遍历会找出最小的元素3,将其与数组第一个元素5交换位置,得到[3, 5, 8, 6, 7];第二轮在剩余的[5, 8, 6, 7]中找出最小的5,由于它已经在正确位置,无需交换;第三轮在[8, 6, 7]中找出最小的6,与8交换,得到[3, 5, 6, 8, 7];第四轮在[8, 7]中找出最小的7,与8交换,最终得到有序数组[3, 5, 6, 7, 8] 。

二、选择排序算法实现对十个数进行排序

        在 C 语言中,我们可以通过以下代码实现选择排序算法对十个数字进行排序:

#include <stdio.h>// 选择排序函数
void selectionSort(int arr[], int n) {int i, j, min_index, temp;for (i = 0; i < n - 1; i++) {min_index = i;for (j = i + 1; j < n; j++) {if (arr[j] < arr[min_index]) {min_index = j;}}// 交换找到的最小元素和当前位置元素temp = arr[min_index];arr[min_index] = arr[i];arr[i] = temp;}
}int main() {int numbers[10];printf("请输入十个整数:\n");for (int i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}selectionSort(numbers, 10);printf("排序后的结果为:\n");for (int i = 0; i < 10; i++) {printf("%d ", numbers[i]);}printf("\n");return 0;
}

代码详解:

选择排序函数selectionSort

void selectionSort(int arr[], int n) {int i, j, min_index, temp;for (i = 0; i < n - 1; i++) {min_index = i;for (j = i + 1; j < n; j++) {if (arr[j] < arr[min_index]) {min_index = j;}}// 交换找到的最小元素和当前位置元素temp = arr[min_index];arr[min_index] = arr[i];arr[i] = temp;}
}
  • 函数参数:arr是要排序的数组,n是数组的元素个数。
  • 外层循环:for (i = 0; i < n - 1; i++),控制排序的轮数。因为经过n - 1轮,就可以将n个元素全部放置到正确位置,所以循环次数为n - 1。
  • 内层循环:for (j = i + 1; j < n; j++),用于在每一轮中从 i + 1 位置开始遍历数组,找出剩余元素中的最小元素的下标,并将其存储在min_index中。在遍历过程中,通过 if (arr[j] < arr[min_index]) 比较元素大小,如果找到比当前最小元素更小的元素,就更新min_index。
  • 交换操作:找到最小元素的下标min_index后,通过中间变量temp将最小元素与当前位置(i位置)的元素进行交换,即:
temp = arr[min_index];
arr[min_index] = arr[i];
arr[i] = temp;

        这样就将当前轮找到的最小元素放置到了它应该在的位置上。

主函数main

int main() {int numbers[10];printf("请输入十个整数:\n");for (int i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}selectionSort(numbers, 10);printf("排序后的结果为:\n");for (int i = 0; i < 10; i++) {printf("%d ", numbers[i]);}printf("\n");return 0;
}
  • 首先定义一个长度为 10 的整型数组numbers,用于存储用户输入的十个数字。
  • 通过for循环和scanf函数,提示用户输入十个整数,并将输入的数字依次存储到数组numbers中。
  • 调用selectionSort函数对numbers数组进行排序,传入数组名和数组元素个数 10。
  • 最后再通过一个for循环和printf函数,将排序后的数组元素依次输出,展示排序结果。

三、代码运行示例

        假设我们输入十个数字:9 5 2 7 1 8 3 6 4 0,程序运行后,会输出排序后的结果:0 1 2 3 4 5 6 7 8 9 。每一个数字都按照从小到大的顺序被正确排列,这正是选择排序算法发挥作用的结果。

四、选择排序算法的时间复杂度和空间复杂度分析

时间复杂度

        选择排序的时间复杂度主要取决于两层嵌套循环。外层循环执行 n - 1 次,内层循环在第i次外层循环时执行 n - i 次。总的比较次数为(n - 1) + (n - 2) +... + 1 = n * (n - 1) / 2,所以选择排序的时间复杂度为O(n^2),其中n是数组元素的个数。这意味着,随着数组规模的增大,选择排序所需的时间会呈平方级增长,在处理大规模数据时效率较低。

空间复杂度

        在选择排序过程中,除了原数组外,只使用了几个额外的变量(如min_index、temp等)来辅助排序,这些变量所占用的空间是固定的,不随数组规模的变化而变化。因此,选择排序的空间复杂度为O(1),属于原地排序算法,不需要额外开辟大量的内存空间。

五、选择排序算法的优缺点

优点:

  • 简单直观:选择排序的原理和实现都非常简单,对于初学者来说,很容易理解和掌握,是学习排序算法的良好入门选择。​
  • 稳定且原地排序:在不考虑相等元素交换的情况下,选择排序是一种稳定的排序算法(如果在比较时遇到相等元素不交换位置,就能保证相等元素的相对顺序不变)。并且它不需要额外的大量内存空间,只需要几个辅助变量,空间复杂度低,适合在内存资源有限的环境下使用。​

缺点:​

  • 效率较低:由于其时间复杂度为O(n^2),在处理大规模数据时,排序所需的时间会急剧增加,相比一些高效的排序算法(如快速排序、归并排序等),性能较差。​
  • 交换次数较多:在选择排序过程中,即使数据已经部分有序,它仍然会按照固定的方式进行比较和交换操作,没有利用数据已有的有序性,这也是导致其效率低下的一个原因。

六、总结

        通过以上详细的讲解和代码实现,我们深入了解了选择排序算法,并成功使用 C 语言对十个数字进行了排序。选择排序虽然在处理大规模数据时效率不高,但它简单易懂的特性使其成为学习排序算法的重要基础。同时,通过对选择排序的学习,我们也对 C 语言数组的操作、循环结构以及函数的使用有了更深入的理解。在实际编程中,我们可以根据具体的数据规模和需求,选择合适的排序算法来提高程序的性能和效率。希望本文能帮助大家更好地掌握选择排序算法。

        如果你对选择排序算法还有其他疑问或文章中有不对的地方,欢迎交流指正!

http://www.dtcms.com/a/411716.html

相关文章:

  • OA、PMES、TMES、SAP、PPM、CRM、DMS、HR系统
  • C语言 ——— 指针
  • 内力网站建设seo简单优化
  • 大模型-自编码器(AutoEncoder)原理(上)
  • Promise开发【进阶】
  • 建立网站需要备案吗网络科技公司起名字大全免费
  • solidworks ppo 试做1
  • Matter over Thread方案,如何助力智能家居生态互通?
  • 创办网站需要怎么做wordpress 点评类网站
  • 网站开发与运营怎么样0基础网站开发
  • mp3链接地址制作网站网站建设与开发选题
  • Dify 从入门到熟悉100 天的学习大纲
  • 为什么做的网站要续费东莞cms建站模板
  • 安徽省高速公路建设指挥部网站为什么实验楼网站上做实验这么卡
  • Java Web应用开发——第一章:Java Web概述测验
  • 北京网站建设哪家好免费正能量不良网站推荐
  • 高端网站建设公司有哪些项目南京房地产开发公司
  • 网络编程
  • VGG改进(11):基于WaveletAttention的模型详解
  • 安徽建筑大学学工在线网站代理网游
  • 网站流量是什么承包工程在哪个网站
  • 游标查询在对话历史场景下的独特优势
  • 临沂做网站的在哪里看看铜陵新闻
  • 密云区社区建设网站蚌埠网站建设中心
  • 参考数据和主数据考试考点及关系梳理
  • 临沂供电公司网站看网红直播做爰的网站
  • 最小修改com.anji-plusjar包使之能够在springboot3使用
  • 武安网站建设价格网站建设公司做ppt吗
  • 【Arxiv 2025】重磅发布!全新傅里叶残差通道注意力模块FRCA,助显著性目标检测与跨模态融合,精准提升深度学习性能!
  • 网站空间期限查询企业取名字