选择排序算法
来源:互联网 发布:js 获取特定属性值 编辑:程序博客网 时间:2024/06/08 18:45
思想
- 先设置哨兵,将第一个元素作为哨兵
- 依次和后续的元素进行比较,如果遇到比此哨兵小的元素,则用此元素替换哨兵,继续比较,直至最后一个元素
- 第一次比较完成之后,将哨兵所在元素和第一个元素进行交换,然后第一个元素即左边的元素就是有序的,接着进行第二次比较,将第二个元素设置为哨兵,依次循环比较
稳定性
- 选择排序不是稳定排序算法
- 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法
代码
//选择排序public class SelectionSort { //元素 private Integer[] elements; //索引 private Integer count; public SelectionSort(Integer max){ this.count = 0; elements = new Integer[max]; } //插入数据 public Integer insert(Integer element){ elements[count] = element; count++; return element; } //显示数据 public void display(){ for (int i = 0; i < count; i++){ System.out.println("array["+i+"]====="+this.elements[i]); } } //排序 public void bubbleSort(){ int out,in,min; for ( out= 0; out < count-1; out++ ){//外层循环 min = out; for (in = out+1; in < count; in++){//内层循环 if(elements[in] < elements[min]){ min = in; } } swap(out,min); } } //交换顺序 private void swap(int one,int two){ int temp = elements[one]; elements[one] = elements[two]; elements[two] = temp; } //测试 public static void main(String[] args) { SelectionSort selectionSort = new SelectionSort(5); selectionSort.insert(3); selectionSort.insert(6); selectionSort.insert(4); selectionSort.insert(90); selectionSort.insert(23); selectionSort.bubbleSort(); selectionSort.display(); }}
结果
array[0]=====3array[1]=====4array[2]=====6array[3]=====23array[4]=====90
阅读全文
0 0
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法--选择排序
- 排序算法---选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法---选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 排序算法--选择排序
- 算法-排序-选择排序
- 排序算法:选择排序
- 排序算法---选择排序
- 排序算法:选择排序
- 排序算法--选择排序
- 算法排序 -- 选择排序
- Spring整合RabbitMQ
- 共享文件库so
- 深入理解Java虚拟机(读书笔记)——运行时数据区域重点
- C:三种链接属性— 外部(external), 内部(internal),无设置(none)
- IDEA中Tomcat启动报:java.lang.OutOfMemoryError: PermGen space异常
- 选择排序算法
- ReentrantLock和ReentrantReadWriteLock使用介绍
- Windows下jps, jconsole无法查看本地java进程问题解决_Java_第七城市
- 02、vue.js 之数据绑定
- tomcat设置直接通过域名访问项目
- 使用JavaMail创建邮件和发送邮件
- windows编译lua
- 收藏的几个容易出错的面试题
- JAVA基础入门