排序算法总结之直接选择排序
来源:互联网 发布:淘宝自拍风格技巧 编辑:程序博客网 时间:2024/04/28 19:28
概念
每一趟在最后的n-i+1(i=1,2,...,n-1)中取最小的记录作为有序表的第i个记录
动态效果:
优点:算法简单,容易实现
缺点:每次只能确定一个元素
Java实现:
package com.liuhao.sort;import java.util.Arrays;//定义一个数据包装类class DataWrap implements Comparable<DataWrap>{ int data; String flag; public DataWrap(int data, String flag) { this.data = data; this.flag = flag; } public String toString(){ return data + flag; } @Override public int compareTo(DataWrap dw) { return this.data > dw.data ? 1 : (this.data == dw.data ? 0 : -1); } }public class SelectSort { public static void selectSort(DataWrap[] data){ System.out.println("开始排序"); int arrayLength = data.length; //依次进行n-1次比较,第i趟比较将第i大的值选出放在i位置上 for(int i=0; i<arrayLength-1; i++){ for(int j=i+1; j<arrayLength; j++){ //i上的数据>j上的数据 if(data[i].compareTo(data[j]) > 0){ DataWrap tmp = data[i]; data[i] = data[j]; data[j] = tmp; } } System.out.println("第" + (i+1) + "趟排序后:" + Arrays.toString(data)); } } public static void main(String[] args) { DataWrap[] data = { new DataWrap(21, "") ,new DataWrap(30, "") ,new DataWrap(49, "") ,new DataWrap(30, "*") ,new DataWrap(16, "") ,new DataWrap(9, "") }; System.out.println("排序之前:" + Arrays.toString(data)); selectSort(data); System.out.println("排序之后:" + Arrays.toString(data)); } }运行上面的程序,可以看出下图的排序效果:
直接选择排序每趟只需选出最小的数据,并将其放在本趟首位即可,可以发现,其实每趟只需进行一次交换即可。而上述算法在每趟的比较中,进行了不止一次的交换。
改进算法:
//依次进行n-1次比较,第i趟比较将第i大的值选出放在i位置上 for(int i=0; i<arrayLength-1; i++){ //minIndex用于保留本趟中最小值的索引 int minIndex = i; for(int j=i+1; j<arrayLength; j++){ //i上的数据>j上的数据 if(data[minIndex].compareTo(data[j]) > 0){ minIndex = j; } } if(minIndex != i){ DataWrap tmp = data[i]; data[i] = data[minIndex]; data[minIndex] = tmp; } System.out.println("第" + (i+1) + "趟排序后:" + Arrays.toString(data)); }
每趟比较的目的是找出本趟中最小数据的索引(minIndex)。
算法分析
对于直接选择排序,数据交换的次数最多要n-1次,但比较的次数较多,时间复杂度为O(n2),空间复杂度仅为O(1)。
从上面两个data为30的DataWrap的排序结果来看,直接选择排序是不稳定的。
0 0
- 排序算法总结之直接选择排序
- 排序算法总结之直接选择排序
- 排序算法总结2-直接选择排序
- 排序算法总结---直接选择排序
- 算法之直接选择排序
- 排序算法汇总之直接选择排序
- 排序算法之直接选择排序
- 八大排序算法之直接选择排序
- 排序算法之直接选择排序
- 排序算法之三--直接选择排序
- 常用排序算法之直接选择排序
- 常见排序算法之直接选择排序
- 排序算法 之 直接选择排序
- 排序算法之--直接选择排序
- 排序算法六:选择排序之直接选择排序
- 排序算法系列-选择之直接选择
- 排序算法总结之直接插入排序
- 直接选择排序算法
- 小编教你如何品评好啤酒
- java.lang.IllegalArgumentException: node to traverse cannot be null!
- Git命令速览----git笔记
- chrome模拟手机功能
- SurfaceView
- 排序算法总结之直接选择排序
- C#多媒体定时器使用方法
- 使用SQL Server Management Studio 创建数据库备份作业
- JAVA_HOME should point to a JDK not a JRE
- 关于C++中的虚拟继承的一些总结
- 隐藏Grid表头
- VS2008调试Release程序--Dump文件方式
- Oracle11gR2 全表扫描成本计算(工作量模式-workload)
- 总结一下一些不错的开源项目