数据结构与算法——简单选择排序

简单选择排序算法就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1 ≤ i ≤ n)个记录交换之。

 1 public class SelectSort {
 2     public void selectSort(int[] arr) {
 3         if(arr==null || arr.length==1) {
 4             return;
 5         }
 6         int i,j,min;
 7         int len=arr.length;
 8         for(i=0;i<len;i++) {
 9             min=i;
10             for(j=i+1;j<len;j++) {
11                 if(arr[min]>arr[j]) {
12                     min=j;
13                 }
14             }
15             if(i!=min) {
16                 swap(arr,i,min);
17             }
18         }
19     }
20     public void swap(int[] arr,int i,int j) {
21         int temp=arr[i];
22         arr[i]=arr[j];
23         arr[j]=temp;
24     }
25 }

简单选择排序算法的时间复杂度分析

       从简单选择排序的过程来看,它最大的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,此时需要比较n-1+n-2+...+1=(n(n-1))/2次。而对于交换次数而言,当最好的时候,交换次数为0,最差的时候,也就是初始降序时,交换次数为n-1,基于最终的排序时间是比较与交换的次数总和。因此,总的时间复杂度为O(n2)。(简单选择排序算法在性能上要略优于冒泡排序)

       算法的稳定性:简单选择排序算法是稳定的

 

posted on 2018-03-31 22:51  Joyce&wang  阅读(210)  评论(0)    收藏  举报

导航