排序(二)之选择排序

选择排序

选择排序排序法也是一种比较简单的排序方法。选择二字就透露了其实现原理,选择待排数组中最小(或最大)的元素与数组的第一个元素交换,这就完成了第一次排序。紧接着第二次排序,选择剩下数组中(除去第一个元素)最小(或最大)的元素,将其与数组中(除去第一个元素)的第一个元素交换。第三次排序,选择剩下数组中(除去前两个元素)最小的元素,将其与数组中(除去第二个元素)的第一个元素交换。。。。。这样依次进行下去,便能够将数组排好序。这样看上去好像有点抽象,下面举个实际的例子:


举例

待排序列:{3,6,2,9,7,5}

第一次排序:2|6|3|9|7|5|

第二次排序:2|3|6|9|7|5|

第三次排序:2|3|5|9|7|6|

第四次排序:2|3|5|6|9|7|

第五次排序:2|3|5|6|7|9|



代码:

public void sort(int[] a) {
// TODO Auto-generated method stub

   int N = a.length;

   for(int i = 0; i < N; i++ ){

      for(int j = i+1; j < N ; j ++ ){

      int min = i;

      if(less(a[j] , a[min]))
            min = j;

      exchange(a , min , i);
      }


   }
}




时间复杂度的讨论

由上面的例子以及代码可以看出,选择排序的交换次数为N,其主要的时间是花在比较大小上。其比较的次数为(N-1)+(N-2)+(N-3)+.....+2+1,所有比较次数大约为N^2/2。所以选择排序的时间复杂度为O(n^2)。

稳定性

举一个简单的例子就能够看出选择排序法的稳定性。排序{6,6,4},当第一次排序时,4和第一个6交换,导致第一个6换到了第二个6的后面,所有选择排序是不稳定的


选择排序和冒泡排序的时间消耗

因为选择排序的时间主要消耗在比较元素大小上,而冒泡排序的时间主要是花在元素的交换上。因为交换比比较大小所花的时间稍长一些,所以选择排序法的效率比冒泡排序的效率稍高一点。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值