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);
}
}
相关推荐
堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法...
排序算法:排序算法汇总--各类排序算法 冒泡,选择,插入,快排,归并,堆排
选择排序算法也是一种简单的排序算法,它的工作原理是通过选择最小或最大元素,并将其与第一个元素交换,以达到排序的目的。选择排序算法的时间复杂度也为O(n^2),因此它也适合小规模的数据排序。 3.插入排序算法 ...
(matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法...
【排序算法】-常见的排序算法
基于Pareto的非支配排序遗传算法II (PESA-II)是一种多目标进化优化算法,它利用了遗传算法的机制以及基于Pareto包络的选择。 PESA-II使用外部存档来存储近似的Pareto解决方案。 基于基于档案成员的地理分布创建的...
常用的排序算法--堆排序,通过创建堆的方法进行排序
各类排序算法整理--C语言描述--本人编写 排序算法种类有: 冒泡 快速排序 堆排序 希尔排序 插入排序 选择排序 二路归并排序
本实验报告的主要目的是通过基数排序算法的实现来掌握三类内部排序的设计思想、适用范围与算法实现,并深入理解和掌握优化排序算法的设计思想和实现过程。 基数排序算法是按照数字的每一位来进行排序的。该算法的...
这里我们将深入探讨三种基本的排序算法:插值排序、选择排序和冒泡排序,这些都是在“sort.zip”压缩包文件中提供的实现。 **插值排序**是一种线性时间复杂度的排序算法,它基于插值搜索的概念。在插值排序中,我们...
本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...
本文将深入探讨标题和描述中提到的一些基本排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、堆排序、快速排序以及归并排序,并结合C++编程语言进行讲解。 1. **选择排序(Selection Sort)** - 选择排序是一...
在这个例子中,可能会有一个类`SortAlgorithms`包含各种排序算法的成员函数,如冒泡排序、选择排序、插入排序、快速排序等。另一个类`UserInterface`则负责处理用户交互和控制执行哪种排序算法。 3. **排序算法的...
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。...本资源通过matlab实现合并排序、简单选择排序、快速排序、冒泡排序、直接插入排序5种常用的排序算法,并部分绘制代表算法原理的动图。
实现经典的排序算法--R语言_sort-algorithm
快速排序算法的设计思想是,选择一个元素作为基准,将其放入适当位置后,把该元素划分成两部分,所有关键字比该元素关键字小的元素放置在前一部分,所有比它大的元素放置在后一部分,并把该元素排在这两部分的中间。...
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!
经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - ...
根据给定文件的信息,我们可以详细地分析C语言中三种常见的排序算法:冒泡排序、选择排序和插入排序。 ### 一、冒泡排序 #### 算法要求 使用冒泡排序方法对10个整数按升序排序。 #### 算法分析 冒泡排序是一种...