选择排序是一种比较简单的排序算法,思路大概是这样的 你要先找到整个数组的最小元素,然后将它置于最前面也就是索引0的那个位置,然后我们从索引1到数组的最大 索引 去寻找最小元素然后将他置于索引1的位置,以此类推下去就可以了。选择排序比较于冒泡排序的数据移动是最少的每次交换只有两个数组元素值进行交换。也就是 你有多少个元素我们就交换多少次,交换次数和数组大小是线性关系,我们目前的算法都是平方级别的
/**
* 随机数工具类
* @addPerson hzb 2018-4-9
*/
public class RandomUtil {
/**
* 生成随机数
* @param nub
* @return
*/
public int[] romdom(int nub){
Double[] doubles = new Double[nub];
int[] ints = new int[nub];
for(int i =0;i<nub;i++){
ints[i] = (int) (StdRandom.uniform()*1000);
}
return ints;
}
}
/**
* 选择排序
* @addPerson : hzb 2018-4-9
*/
public class SelectionSorting {
/**
* 值互相交换
* @param a
* @param i
* @param j
*/
private static void exch(int[] a, int i, int j){
int x = a[i];
a[i] = a[j];
a[j] =x;
}
public static void main(String[] args){
int[] romdom = new RandomUtil().romdom(1000);
System.out.println("排序前");
for (int i =0;i<romdom.length-1;i++) {
System.out.print(romdom[i]+"|");
}
long startTime = System.currentTimeMillis();
System.out.println();
System.out.println("开始时间:"+startTime);
//数l组长度 c=
int length = romdom.length;
for(int i=0;i<length;i++){
//设最小值字段索引
int min = i;
//先找出最小值的索引
for(int j=i+1;j<length;j++){
//对比两个值的大小判断谁是目前最小的值
if(romdom[j]<romdom[min]){
min = j;
}
}
//找到了最小值后交换值
exch(romdom,i,min);
}
long sndTime = System.currentTimeMillis();
System.out.println("结束时间:"+sndTime);
System.out.println("耗时:"+Double.valueOf(sndTime-startTime)/1000+"秒");
System.out.println("排序后");
for (int i =0;i<romdom.length-1;i++) {
System.out.print(romdom[i]+"|");
}
}
}
结果
http://www.atool.org/sort.php 这个连接是动画帮助
有问题请发邮箱 wavesape@126.com