算法入门学习----1.2选择排序
2018-01-22 19:54
190 查看
一、选择排序的原理
一个数组a[]有N个元素:第一次从第一个数(arr[0])到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第一个数(arr[0])交换位置(比较n-1次);
第二次从第二个数(arr[1])到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第二个数(arr[1])交换位置(比较n-2次);
第三次从第三个数(arr[2])到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第三个数(arr[2])交换位置(比较n-3次);
........
第N-1次从第N-1个(arr[n-2])数到最后一个数(arr[n-1])根据遍历,找出最小的数,然后和第N-1个数(arr[n-2])交换位置(比较1次);
二、选择排序的时间复杂度和空间复杂度
时间复杂度:1+2+3+......(n-1)=n*(n-1)/2 所以时间复杂度为 n^2空间复杂度:最优的情况下(已经有顺序)复杂度为:O(0) ;
最差的情况下(全部元素都要重新排序)复杂度为:O(n );;
平均的时间复杂度:O(1)
稳定性:不稳定,例子中的两个5相对位置会改变。
三、选择排序代码的实现 Java
public class Xuanzhe { public static void main(String[] args){ int[] arr=new int[]{1,5,6,89,5,6,12,48,4,23}; xuanzhedemo(arr); } public static void show(int[] arr){ //输出函数 for(int a: arr){ System.out.println(a); } } public static void xuanzhedemo(int[] arr){ for(int n=1;n<arr.length;n++){ //第一层,表示第几次循环 int exchange = n-1; //temp表示目前是确定哪个位置的数 for(int k=exchange;k < arr.length-1;k++){ //第二层,取出每次循环最小那个数的下标,赋值给temp if(arr[exchange] > arr[k+1]){ exchange = k+1; } } if(exchange!=n-1){ //如果出现变化,那么更换位置 int temp = 0; temp = arr[exchange]; arr[exchange]=arr[n-1]; arr[n-1]=temp; } } show(arr); } }
四、和冒泡的区别
选择排序比冒泡排序时间上要优秀一点,主要在于,冒泡排序每次比较都需要交换位置,而选择排序通过记录最大或最小位置的索引最后只交换一次位置就可以了。相关文章推荐
- 算法入门学习----1.2选择排序
- 算法入门学习----1.2选择排序
- 算法入门学习----1.2选择排序
- 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!
- 算法入门学习----2.2快速排序
- 算法学习与实践之选择排序
- C语言学习历程(十七)数据结构与排序(冒泡、选择、希尔排序)算法
- java入门学习(3)—循环,选择,基础算法,API概念
- 经典算法学习——直接选择排序
- 算法入门学习----2.2快速排序
- 数据结构与算法学习:选择排序
- 经典算法学习——直接选择排序
- 算法入门学习----2.2快速排序
- 算法入门-选择排序
- 算法入门学习----2.2快速排序
- 【算法学习】排序算法 - 简单选择排序
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- Java学习资料-Java常用算法-选择排序算法
- 算法学习笔记--选择排序