选择排序(排序算法--比较排序)
来源:互联网 发布:唐山地震 知乎 编辑:程序博客网 时间:2024/06/05 10:50
第二篇算法。
选择排序,也是非常简单的排序算法,学校课本中学过。
定义如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。(摘自维基百科)
Java语言实现:
int[] arrays = {34, 32, 22, 82, 55, 89, 50, 37, 5, 3}; System.out.println("y: " + Arrays.toString(arrays)); int size = arrays.length; for (int i = 0; i < size - 1; ++i){ int t = i; for (int j = i+1; j < size ; ++j){ if (arrays[t] > arrays[j]){ t = j; } } int tmp = arrays[t]; arrays[t] = arrays[i]; arrays[i] = tmp; System.out.println( i + ": " + Arrays.toString(arrays)); }输出的结果为:
y: [34, 32, 22, 82, 55, 89, 50, 37, 5, 3]0: [3, 32, 22, 82, 55, 89, 50, 37, 5, 34]1: [3, 5, 22, 82, 55, 89, 50, 37, 32, 34]2: [3, 5, 22, 82, 55, 89, 50, 37, 32, 34]3: [3, 5, 22, 32, 55, 89, 50, 37, 82, 34]4: [3, 5, 22, 32, 34, 89, 50, 37, 82, 55]5: [3, 5, 22, 32, 34, 37, 50, 89, 82, 55]6: [3, 5, 22, 32, 34, 37, 50, 89, 82, 55]7: [3, 5, 22, 32, 34, 37, 50, 55, 82, 89]8: [3, 5, 22, 32, 34, 37, 50, 55, 82, 89]
if (arrays[t] > arrays[j])改为:
if (arrays[t] < arrays[j])
y: [34, 32, 22, 82, 55, 89, 50, 37, 5, 3]0: [89, 32, 22, 82, 55, 34, 50, 37, 5, 3]1: [89, 82, 22, 32, 55, 34, 50, 37, 5, 3]2: [89, 82, 55, 32, 22, 34, 50, 37, 5, 3]3: [89, 82, 55, 50, 22, 34, 32, 37, 5, 3]4: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]5: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]6: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]7: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]8: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]发现在 4 时就已经排好顺序了。
可以对此进行优化,加入flag的判断:
int[] arrays = {34, 32, 22, 82, 55, 89, 50, 37, 5, 3}; System.out.println("y: " + Arrays.toString(arrays)); int size = arrays.length; for (int i = 0; i < size - 1; ++i){ int t = i; boolean flag = true; for (int j = i+1; j < size ; ++j){ if (arrays[t] < arrays[j]){ t = j; flag = false; } } int tmp = arrays[t]; arrays[t] = arrays[i]; arrays[i] = tmp; System.out.println( i + ": " + Arrays.toString(arrays)); if (flag){ break; } }
优化后的输出结果如下:
y: [34, 32, 22, 82, 55, 89, 50, 37, 5, 3]0: [89, 32, 22, 82, 55, 34, 50, 37, 5, 3]1: [89, 82, 22, 32, 55, 34, 50, 37, 5, 3]2: [89, 82, 55, 32, 22, 34, 50, 37, 5, 3]3: [89, 82, 55, 50, 22, 34, 32, 37, 5, 3]4: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]5: [89, 82, 55, 50, 37, 34, 32, 22, 5, 3]
可以看到,少几次的循环。
阅读全文
0 0
- 选择排序(排序算法--比较排序)
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 排序:选择排序(算法)
- 冒泡排序(排序算法--比较排序)
- 排序算法-选择排序和插入排序比较(待续未完)
- 插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序算法比较
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法--选择排序
- 排序算法---选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法---选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 形态学处理
- Stanford Core NLP
- C#Datatable导入sqlserver数据库中,三种常见,快捷的方法
- linux C 获取网关代码实现
- 矩阵快速幂模板
- 选择排序(排序算法--比较排序)
- DPDK-ELASTIC FLOW DISTRIBUTOR LIBRARY(灵活的流分发库)
- PyCharm无法使用Django新建项目:'django-admin.py'不是内部或外部命令
- WordPress 建站中15个常见的错误
- js中bind、call和apply的区别
- Openstack实例控制台无法打开的解决办法
- 解决error C1083: 无法打开包括文件: “sys/time.h”的问题
- C#——Redis队列模式
- Xshell登录进入CentOS 6.5系统后,Python交互模式和数据库模式下,出现乱码的问题及解决方法