【东东学数据结构】选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
复杂度分析
选择排序的交换操作介于和
次之间。选择排序的比较操作为
次之间。选择排序的赋值操作介于
和
次之间。
比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。 交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。 交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。
分类 | 排序算法 |
---|---|
数据结构 | 数组 |
最差时间复杂度 | О(n²) |
最优时间复杂度 | О(n²) |
平均时间复杂度 | О(n²) |
最差空间复杂度 | О(n) total, O(1)auxiliary |
最佳算法 | 偶尔出现 |
java实现:
1 import java.util.Arrays;
2
3 /**
4 * User: laichendong
5 * Date: 12-3-13
6 * Time: 上午11:11
7 */
8 public class SelectionSort {
9 public static void main(String[] args){
10 int[] a = { 49, 38, 65, 97, 76, 13, 27, 52 };
11 int i, j, k, t;
12 for(i = 0; i < a.length - 1; i++){
13 k=i;
14 for(j = k + 1; j < a.length; j++){
15 if(a[k] > a[j]){
16 k = j;
17 }
18 }
19 t = a[k];
20 a[k] = a[i];
21 a[i] = t;
22 System.out.println(Arrays.toString(a));
23 }
24 }
25 }
输出:
1 [13, 38, 65, 97, 76, 49, 27, 52]
2 [13, 27, 65, 97, 76, 49, 38, 52]
3 [13, 27, 38, 97, 76, 49, 65, 52]
4 [13, 27, 38, 49, 76, 97, 65, 52]
5 [13, 27, 38, 49, 52, 97, 65, 76]
6 [13, 27, 38, 49, 52, 65, 97, 76]
7 [13, 27, 38, 49, 52, 65, 76, 97]
8 [13, 27, 38, 49, 52, 65, 76, 97]
我理解的选择排序就是每次选择未排序集合中最小的数放到已排序序列的最后。
动画演示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?