排序算法 - 选择排序

本文详细介绍了简单选择排序的基本思路及算法实现,通过代码示例解释了如何从未排序的数组中选择最小元素并将其置于正确位置的过程。分析了算法的时间复杂度及性能特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本思路

先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。

算法代码

 1 //简单的选择排序
 2 void SelectSort(int *arr, int n)
 3 {
 4     int i, j;
 5     int temp;
 6     int minIndex;
 7     for (i = 0; i < n - 1; i++) //做第i趟排序,共n-1趟,因为第n趟只剩一个一定是最大的
 8     {
 9         minIndex = i;
10         for (j = i + 1; j < n; j++)
11         {
12             if (arr[j] < arr[minIndex])
13                 minIndex = j;
14         }
15         if (minIndex != i) //后面有更小的元素
16         {
17             temp = arr[i];
18             arr[i] = arr[minIndex];
19             arr[minIndex] = temp;
20         }
21     }
22 }

算法分析

从i个记录中挑选最小记录需要比较i-1次。

第i(i=0~n-2)趟从n-i记录中挑选最小记录需要比较n-i-1。

对 n 个记录进行简单选择排序,所需进行的关键字的比较次数 总计为:

 

移动记录的次数,正序为最小值 0,反序为最大值3(n-1) 。

简单选择排序的最好、最坏和平均时间复杂度为O(n2)。

 

转载于:https://www.cnblogs.com/WindSun/p/11360751.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值