排序和顺序统计量之简单选择排序
2016-05-30 10:23
288 查看
这个文章接上篇文章,堆排序和简单选择排序都属于选择排序算法。
所谓选择排序,其核心思想就是,对一组数据,每次选择其中最小的那个(我们针对正序来说),将其放在最前面的位置上。
具体设计时,定义两重循环,针对外层循环inti=0 to n=A.length−1,假设数据A[i]为当前数组A[i] to A[n−1]中最小的那个,然后内层循环从i+1 to n−1依次与数据A[i]进行比较,找出当前数组A[i] to A[n−1]中真正最小的元素,如果这个元素不在i处,则将其与A[i]进行交换。
Java实现代码
关于这个算法的时间复杂度
1+2+3+...+(n−1)=O(n2)
空间复杂度
只需要一个额外的临时空间,即在元素进行交换时。
简单选择排序是一个不稳定的算法。
例如
排序前:
2,4,4*,3
排序后:
2,3,4*,4
所谓选择排序,其核心思想就是,对一组数据,每次选择其中最小的那个(我们针对正序来说),将其放在最前面的位置上。
简单选择排序
针对一组数组A=1,3,5,2,7,4,9,6,8,每次循环对数组中的元素进行比较,找出本次循环中最小的元素,将其放在最前面的位置。具体设计时,定义两重循环,针对外层循环inti=0 to n=A.length−1,假设数据A[i]为当前数组A[i] to A[n−1]中最小的那个,然后内层循环从i+1 to n−1依次与数据A[i]进行比较,找出当前数组A[i] to A[n−1]中真正最小的元素,如果这个元素不在i处,则将其与A[i]进行交换。
Java实现代码
package com.lyn.thinkinginjava.chapter6; public class SelectSort { public static void main(String []args){ int[] A={1,2,5,4,7,9,3,8,6}; selectSort(A); for(int i=0;i<A.length;i++){ System.out.println(A[i]); } } public static void selectSort(int[] A){ int n=A.length; for(int i=0;i<n-1;i++){ int small=i; for(int j=i+1;j<n;j++){ if(A[j]<A[small]){ small=j; } } if(small!=i){ swap(A,small,i); } } } public static void swap(int[]A,int i,int j){ int temp=A[i]; A[i]=A[j]; A[j]=temp; } }
关于这个算法的时间复杂度
1+2+3+...+(n−1)=O(n2)
空间复杂度
只需要一个额外的临时空间,即在元素进行交换时。
简单选择排序是一个不稳定的算法。
例如
排序前:
2,4,4*,3
排序后:
2,3,4*,4
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序