首页 > 代码库 > 排序算法总结之直接选择排序
排序算法总结之直接选择排序
概念
每一趟在最后的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 = http://www.mamicode.com/data;>运行上面的程序,可以看出下图的排序效果:直接选择排序每趟只需选出最小的数据,并将其放在本趟首位即可,可以发现,其实每趟只需进行一次交换即可。而上述算法在每趟的比较中,进行了不止一次的交换。
改进算法:
//依次进行n-1次比较,第i趟比较将第i大的值选出放在i位置上 for(int i=0; i<arrayLength-1; i++){ //minIndex用于保留本趟中最小值的索引 int minIndex = i; for(int j=1+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的排序结果来看,直接选择排序是不稳定的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。