博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法(二)选择排序
阅读量:4459 次
发布时间:2019-06-08

本文共 1299 字,大约阅读时间需要 4 分钟。

1,算法描述

选择排序(Selection-sort),首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2,实现步骤

  • 初始状态:无序区为R[1..n],有序区为空;
  • 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
  • n-1趟结束,数组有序化了。

  实现

1     private static void selectionSort(int[] a) { 2         long start = System.nanoTime();   3         int len = a.length; 4         int minIndex = 0; 5         for(int i = 0; i < len - 1; i++){
//循环n-1次,每次从未排序序列中找个最小值交换到已排序序列尾部 6 minIndex = i; 7 for(int j = i; j < len -1; j++){
//从未排序的序列中找到最小值 8 if(a[minIndex] > a[j]){ 9 minIndex = j;10 } 11 }12 swap(a,minIndex,i);//把找到的最小值换到已排序序列的尾部13 }14 long end = System.nanoTime();15 System.out.println((end - start)/1000.0 + "us");16 }17 18 private static void swap(int[] a, int j, int i) {19 int temp = a[j];20 a[j] = a[i];21 a[i] = temp; 22 }

3,算法分析

时间复杂度:

最佳情况:T(n) = O(n^2)

最差情况:T(n) = O(n^2)

平均情况:T(n) = O(n^2)

空间复杂度:

占用常数的额外空间,所以空间复杂度为O(1)

稳定性:不稳定

 

参考:

http://www.cnblogs.com/eniac12/p/5329396.html

转载于:https://www.cnblogs.com/xdyixia/p/9138508.html

你可能感兴趣的文章
一些奇怪的问题求回答
查看>>
这些年踩过的坑
查看>>
iOS开发拓展篇——如何把项目托管到GitHub
查看>>
性能优化之数据库优化
查看>>
类的继承、菱形继承、派生、多态
查看>>
mysql约束
查看>>
javascript鼠标及键盘事件总结及案例
查看>>
mysql表之间的关系及级联操作
查看>>
mac 搭建virtualenv的那些坑
查看>>
多路复用IO模型
查看>>
2019秋招复习笔记--数据库基本操作
查看>>
2019秋招复习笔记--智力题
查看>>
MySQL学习笔记
查看>>
面试题
查看>>
DS博客作业08-课程总结
查看>>
利用Python爬虫刷店铺微博等访问量最简单有效教程
查看>>
浅谈软件测试与墨菲定律
查看>>
文件安全复制之 FastCopy
查看>>
强烈推荐美文之《从此刻起,我要》
查看>>
敏捷开发流程
查看>>