数据结构 - 简单选择排序法
来源:互联网 发布:象棋软件棋力排名 编辑:程序博客网 时间:2024/05/20 03:05
数据结构 - 简单选择排序法
在之前的博文里已经介绍过排序的两个基本方法:
双重循环法和冒泡排序法。
基本思想
其实上面两种方法的基本思想都是一样的:
就是将排序步骤分成两层循环, 在内层的每1个循环中, 找出剩下未排序成员最小(大)的1个, 并将其放到队伍前列。
只不过, 冒泡排序法的元素交换更具效率, 通常情况下会比双重循环法更快完成排序。
这次介绍的简单选择法的本质也和上面两种方法一样的。
冒泡(or 双层循环)排序法每1个内层循环中, 会通过多次元素交换, 最终最小(大)的未排序元素会被移动到队伍前列。
而简单选择法就是定1个最小变量, 在1个内层循环中, 通过比较(而不是元素交换)得到未排序的最小(最大)元素的位置。然后才1次过把这个元素移动到前列。
简单选择排序法 代码
如果你看懂上面写的是什么, 代码是很容易写出来的。
int simpleSelectionSort(int * arr, int len){ int i,j; int min; for (i = 0; i < len -1; i++){ min = i; //first make the first element to be the min for (j = i+1; j < len; j++){ if (arr[j] < arr[min]){ min = j; } } //then the arr[j] is the min element in the loop if (i != min){ _swap(arr, i, min); } }}
代码分析
上面代码很简单, 在每1个内循环中, 我们会用min这个变量来存储最小的元素位置。
然后用未排序元素来跟min位置元素比较…
debug信息:
4, 1, 5, 8, 0, 3, 7, 9, 6, 2step 0: changed: *0, 1, 5, 8, *4, 3, 7, 9, 6, 20, *1, 5, 8, 4, 3, 7, 9, 6, 2step 1: changed: 0, 1, *2, 8, 4, 3, 7, 9, 6, *5step 2: changed: 0, 1, 2, *3, 4, *8, 7, 9, 6, 50, 1, 2, 3, *4, 8, 7, 9, 6, 5step 3: changed: 0, 1, 2, 3, 4, *5, 7, 9, 6, *8step 4: changed: 0, 1, 2, 3, 4, 5, *6, 9, *7, 8step 5: changed: 0, 1, 2, 3, 4, 5, 6, *7, *9, 8step 6: changed: 0, 1, 2, 3, 4, 5, 6, 7, *8, *9change count: 7compare count: 450, 1, 2, 3, 4, 5, 6, 7, 8, 9
可以见到这个简单选择排序方法不能减少比较次数, 但是大大减少了元素交换的次数。
简单选择排序法的时间复杂度仍然是O(
小结
其实本文一开始提到的博文中提到, 冒泡排序法通过优化是能够元素比较次数的。
如果你的排序元素交换的开销比比较开销大得多的话,这个简单排序法是可以考虑的.
0 0
- 数据结构 - 简单选择排序法
- 数据结构----简单选择排序
- 数据结构简单选择排序
- 数据结构-选择排序-简单选择排序
- 【C#数据结构】简单选择排序
- 初学数据结构---简单选择排序
- [Java数据结构]简单排序之选择排序
- 【数据结构】算法10.9 选择排序-简单选择排序
- 简单选择排序-------零基础学数据结构
- 简单选择排序-------零基础学数据结构
- php数据结构之简单选择排序
- 数据结构c语言版之简单选择排序
- [数据结构与算法]简单选择排序算法
- 【数据结构】-简单选择排序Java实现
- c语言数据结构 简单选择排序
- 大话数据结构之:简单选择排序
- JAVA数据结构:简单排序(冒泡,选择,插入)
- 简单选择排序法
- nginx简单的反向代理
- https与http的区别
- 打印大X 蓝桥杯
- 数据结构概述
- CPPUTest 判断的宏
- 数据结构 - 简单选择排序法
- 冒泡排序和插入排序区别
- Kernel.org宣布将关闭FTP服务器
- 输入函数相关博客学习总结
- python 环境配置总结
- 基础练习 时间转换
- 前端,不要太过依赖JQuery库(一)
- Android屏幕适配-资源文件夹命名与匹配规则
- 自定义JSTL 标签(Tag) 项目实践使用总结