package sort;
import java.util.Arrays;
import java.util.Random;
/**
* 选择排序:复杂度N^2
* 原理: 1.默认从第一个数i开始,假设是最小数,赋值给一个变量tem
* 2.用而二个开始和这个数比较,如果小于该数,则赋值给这个变量
* 3.循环第二层循环结束,就交换元素,然后从i++ 开始重复刚才动作
* 比如:士兵站一排 a,b,c,d,e,f,g 然后从a开始,a:165cm b:170cm ,记住现在最小的是a,
* 但是此时并不交换位置,同理c:180cm,a 还是不变位置,循环到后面 g:100cm,
* 这个时候g 是最矮的,循环结束,a和g 交换位置,其他人的位置都不变,然后从b 开始循环..
* 分析:相邻比较-交换,把大的往后移,这是冒泡算法,选择排序是冒泡算法的进化版
* 因为冒泡算法每次比较,符合条件都会交换位置,而选择排序仅仅是先记录位置,一层循环结 * 束才交换
* 这里这哪是没找到好的图,有了再补上吧!
* @author @Ran
* @ AbstractSort 请参考第一篇
*/
public class Selection<T> extends AbstractSort<T> {
@Override
public <T extends Comparable<? super T>> T[] sort(T[] t) {
for(int i =0;i<t.length;i++){
// 默认当前元素为最小值
T tem = t[i];
int index = i;
for(int j=i;j<t.length-1;j++){
// 和前一个元素比较,如果前一个元素小,则让赋值变量
if(tem.compareTo(t[j+1])>0){
index = j+1;
tem = t[index];
}
}
// 如果当前元素不是最小的,则交换位置
super.swap(t, i, index);
}
return t;
}
public static void main(String[] args) {
int a = 5000;
Integer [] t = new Integer[a];
Random r = new Random();
for(int i =0;i<a;i++){
t[i] = r.nextInt(a);
}
System.out.println("未排序结果:"+Arrays.toString(t));
// 这里用了下,前面的冒泡算法,做对比
Sort s1 = new Bubble();
Sort s3 = new Selection();
Integer[] t3 = t.clone();
s1.sort(s1, t);
s3.sort(s3, t3);
System.out.println("排序后结果:"+Arrays.toString(t3));
System.out.println(s1);
System.out.println(s3);
}
}
相关推荐
VC++多线程实现三种排序算法比较----冒泡排序、快速排序、归并排序,很有意思,可以下载看看!
排序算法:排序算法汇总--各类排序算法 冒泡,选择,插入,快排,归并,堆排
(matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法...
排序算法图解--Document.zip
选择排序算法、冒泡排序算法和插入排序算法的时间复杂度为O(n2),写法简单,逻辑易懂,但算力性价比不高,不适用于数据量较大时使用。 合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为...
【排序算法】-常见的排序算法
《数据结构与算法》-李春葆 实验报告-典型排序算法实践-快速排序
《数据结构与算法》-李春葆 实验报告-典型排序算法实践-基数排序
常用的排序算法--堆排序,通过创建堆的方法进行排序
各类排序算法整理--C语言描述--本人编写 排序算法种类有: 冒泡 快速排序 堆排序 希尔排序 插入排序 选择排序 二路归并排序
在STM8S003单片机上实现数组排序,用3种冒泡排序法对数组进行排序,并通过串口打印排序过程。
最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!
各类排序算法整理--更新中,请多提宝贵意见,算法均有本人编写,如有问题欢迎指正!
经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - ...
我写的一个内排序的博客算法的一个总结,全部代码在这个里面,需要的就看看吧!!还需要什么请联系我,我有就发!!
基于Pareto的非支配排序遗传算法II (PESA-II)是一种多目标进化优化算法,它利用了遗传算法的机制以及基于Pareto包络的选择。 PESA-II使用外部存档来存储近似的Pareto解决方案。 基于基于档案成员的地理分布创建的...
七大排序算法如下: 交换排序:快速排序quicksort,冒泡排序bubblesort 选择排序:直接选择排序selectionsort,堆排序maxheapsort 插入排序:直接插入排序insertsort,希尔排序shellsort 合并排序:归并排序...
算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...
sort 排序算法实现_支持插值排序+选择排序+冒泡排序_sort