java排序算法——选择排序

      选择排序(Selection sort)是一种简单直观的[排序算法]它的工作原理是每一次从待排序的[数据元素]中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

      选择排序输出的是原序列的一个重排<a1*,a2*,a3*,...,an*>;,使得a1*<=a2*<=a3*<=...<=an*

      假设分别有4号小球,8号小球,1号小球,5号小球,9号小球,7号小球,使用选择排序对它们进行升序排序

      其中心思想是,假设有n个数:
             第1次,遍历所有数,将最小的数放在首位;
             第2次,遍历2-n位置的所有数,将最小的数字放在第2位;
             第3次,遍历3-n位置的所有数,将最小的数字放在第2位;
              ......
              第n-1次,将n和n-1俩个位置上,小的数放在n-1位置上

      初始顺序: 4,8,1,5,9,7

      第一次排序:4和8进行对比,1,5,9,7

      第二次排序:4再和1比 其它数据不变

            1,8,4,5,9,7

    第三次排序:4再和5比 其它数据不变

            1,8,4,5,9,7

    第四次排序:4再和9比 其它数据不变

          1,8,4,5,9,7

       ......

    当4和除了自己之外的所有数据比较完成了之后,

   接着第二的数据就开始对除了小于或者等于自己索引的数据之外的数据进行比较

    以此类推...
                                                                    
                                                                                                                                              时间复杂度 O(N^2)
                                                                                                                                                            (稳定)

      

private static void chooseSort(int[] arr) {

    for (int i = 0; i < arr.length; i++) {

   	 int least = i;					//选取当前的遍历到的数

    for (int j = i + 1; j < arr.length; j++) {

   	 if (arr[j] < arr[least]) {		//循环找到本轮最小的数

    		least = j;			

    	 }

    }
        
        //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
        if(i != least){  //交换a[i]和a[least]
            int temp = arr[i];
            arr[i] = arr[least];
            arr[least] = temp;
        }

	}
}
                  {\__/}                                          {\__/}
                  ( ·-·)                                          (·-· )
                  / >------------------------------------------------< \
                           |      ☆                            |
                           |         ☆                         |
                           |  ★                                |
                           |         ☆                         |
                           |      ☆                            |
                           |                                   |
                           -------------------------------------

 

如有兴趣可以关注我的公众号:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值