排序2:选择排序

题目:对于一个int数组,请编写一个选择排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:[1,2,3,5,2,3],6 [1,2,2,3,3,5]

思路:这里的选择排序指的是直接选择排序,思路很简单直接。对于n个元素,先从i=0~i=n-1遍历数组找出最小值O(n),将其与位置0的元素交换,即将其放到位置i=0,然后遍历数组i=1~i=n-1,将其放到位置i=1,依次进行,需要遍历的范围逐渐变小;即本方法是一个2层遍历,外层遍历范围是i=0~i=length-1,内层遍历范围是从j=i~length-1。所谓选择排序是指进行n次选择,每次选择是找出当前范围内的最小值。注意,每次找出最小值后将这个最小值与a[i]进行位置交换将其放到前面有序的位置。即不断对剩余数组进行查找,找出最小值将其与前面的有序序列的后面一个元素进行交换。时间复杂度O(n^2),空间复杂度O(1),不稳定

import java.util.*;
//选择排序:遍历数组,找出当前排序范围内的最小值,将其放在前面已经排序的序列后面
public class SelectionSort {
    public int[] selectionSort(int[] A, int n) {
        //特殊输入
        if(A==null||A.length<=0) return A;
        
        //定义一个临时变量表示当前最小值
        int curMin=0;
    //定义一个临时变量表示当前最小值对应的下标,因为只有遍历到结尾才能知道最小元素,而j是变化的,因此需要记录这个j值
        int curMinIndex=0;
        
        //双重循环,外层循环表示当前需要遍历的数组范围
        for(int i=0;i<A.length;i++){
            //内层循环,从i开始到结尾,逐渐缩小,找到最小值后与A[i]交换
            //初始时认为最小值就是第一个元素,于是最小值下标是第一个元素的下标
            curMin=A[i];
            curMinIndex=i;
            for(int j=i+1;j<A.length;j++){
                //总是将小的值放到数组的前面
                if(A[j]<curMin){
                    curMin=A[j];
               //需要记录当前最小值对应的下标,否则j变化之后仅根据curMinIndex找不到这个元素
                    curMinIndex=j;
                }
            }
            
            //内层遍历结束,找到当前范围的最小值,将其与A[i]位置交换
            int temp=A[i];
            A[i]=A[curMinIndex];
            A[curMinIndex]=temp;
        }
        //千万不要忘记返回结果
        return A;
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值