选择排序

一、选择排序的思想

第一次,找出序列中最小的数与第一个数交换。

第二次,找出序列中最小的数与第二个数交换。

第n次  ,找出序列中最小的数与第n 个数交换。

如此反复,直到序列有序。这种方法叫做选择排序,它是在不断的选择剩余元素中的最小者

二、简单选择排序算法

 1 /**
 2  * 选择排序 
 3  * 
 4  * 选择排序的思想:
 5  * 第一次,找出序列中最小的数与第一个数交换。 
 6  * 第二次,找出剩余序列中最小的数与第二个数交换。 
 7  * 第n次 ,找出剩余序列中最小的数与第n个数交换。 如此反复,直到序列有序。
 8  * 这种方法叫做选择排序,它是在不断的选择剩余元素中的最小者。
 9  * 
10  * @author lp
11  *
12  */
13 public class SelectSort {
14     
15     public static int[] selectSort(int[] array) {
16         int N = array.length;
17         int position = 0;
18         for (int i = 0; i < N; i++) {
19             position = i;// 暂存当前最小值位置
20             int temp = array[i];// 暂存当前最小值
21             // 查找剩余序列中的最小值
22             for (int j = i + 1; j < N; j++) {
23                 if (array[j] < temp) {
24                     position = j;// 记录新最小值所在的位置
25                     temp = array[j];// 记录新最小值
26                 }
27             }
28             //整趟循环完后才进行交换
29             array[position] = array[i];// 新最小值位置存放当前最小值
30             array[i] = temp;// 当前最小值位置存放新最小值
31         }
32         return array;
33     }
34 
35     public static void main(String[] args) {
36         int[] array = { 1, 54, 6, 3, 78, 34, 12, 45 };
37 
38         selectSort(array);
39 
40         for (int element : array) {
41             System.out.print(element + " ");
42         }
43     }
44 }

时间复杂度:

比较次数:

无论初始序列如何,其比较次数都是一样多,第i趟排序需要进行n-i次比较,总共要进行n(n-1)/2次比较。

交换次数:

最好情况,也就是初始为顺序时,交换次数为0。

最差情况,也就是初始为逆序时,交换次数为n-1次。

最终的排序时间=比较次数+交换次数。因此总的时间复杂度为O(n^2)

 

因为简单选择排序没有利用上次选择时比较的结果,所以造成了比较次数多,速度慢。如果能够加以改进,将会提高排序的速度,所以出现了后面的树形选择排序堆排序

 

三、树形选择排序和堆排序

 

堆排序算法:http://www.cnblogs.com/rouqinglangzi/p/7521769.html

 

可参考博客:http://www.cnblogs.com/kubixuesheng/p/4359406.html

posted @ 2017-09-14 17:48  静水楼台/Java部落阁  阅读(164)  评论(0编辑  收藏  举报