【数据结构和算法那些事】--【2】--选择排序

个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max


原理描述:

选择排序总的来说就是每一趟从n-i+1 (i=1,2,...,n)个元素中选取一个关键字最小的元素作为有序序列中的第i个元素。
(以从小到大的顺序为例)第一趟,从n 个元素中找出关键字最小的元素与第1 个元素进行交换;第二趟,再从第2 个元素开始的后面的n-1 个元素中再选出关键字最小的元素与第2 个元素交换;依次类推,即第 K 趟,则从第k 个元素开始的后面的 n-k+1 个元素中选出关键字最小的元素与第k 个元素交换,直到整个序列有序。

图解说明:
 
待排序序列       14    45    56     10    11    24    45    23
                          k                    min                               
 第1趟                10     45    56    14     11    24    45    23
                                   k                    min                                                   
第2趟                 10    11     56     14    45    24    45    23
                                          k    min
第3趟                 10    11    14     56    45    24    45     23
                                                  k                            min
第4趟                 10    11    14    23     45     24    45    56
                                                          k     min
第5趟                 10    11    14    23    24     45    45    56
                                                               k=min
第6趟                 10    11    14    23    24    45     45    56
                                                                       k=min
第7趟                 10    11    14    23    24    45    45    56
 
实现代码:

/**
     *  @Description :选择排序
     *  @param  k        带排序的数组
     *  @param  start    数组中待排序区间的起点
     *  @param  end    数组中待排序区间的终点
     */
     public   void  selectSort( int [] k,  int  start,  int  end){
         for ( int  i = start; i < end-1; i++){   
             //选择出最小的元素
             int  min = i;
             for ( int  j = min+1; j <= end; j++){
                 if (k[j] < k[min]){
                    min = j;
                }
            }
             //将最小的元素与第i 个元素交换
             if (i != min){
                int  temp = k[i];
                k[i] = k[min];
                k[min] = temp;
            }
        }    
 }


public   static   void  main(String[] args) {
        MySortMethod method =  new  MySortMethod();
        MyUtil myUtil =  new  MyUtil();
         int [] r = {14, 45, 56, 10, 11, 24, 45, 23};
        
        
        myUtil.printArray(r);
        method.selectSort(r, 0, r. length -1);
        myUtil.printArray(r);
    }


相关分析:

空间效率:简单的选择排序只需要一个辅助空间。
时间效率:
    在简单选择排序中,所需移动的元素次数较少,若待排序的序列已经有序,则使用简单排序不需要移动元素,在最坏的情况下,若待排序的序列本身就是逆序的,则移动元素的次数为 3(n-1),交换一次要移动3次。
    简单选择排序都需要进行n(n-1)/2 次比较操作,因此时间复杂度为 O(n )。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值