选择排序

基本思想:

选择排序的原理是每次一从待排序的数据元素中找到最大(或者最小)的元素放到序列的起始位置,直到全部的待排序的数据元素排完。
这里写图片描述


实现代码

public class test {


    public static void main(String[] args){
        Integer[] arr = {10,9,3,1,4,2,7,8,6,5};
        test.sort(arr);
        for(int a:arr){
            System.out.println(a);
        }
    }

    private static void sort(Integer[] arr) {
        int n = arr.length;
        for(int i=0;i<n;i++){
            int minIndex = i;
            for(int j=i+1;j<n;j++){
                //注意循环的时候是和最小的元素进行比较
                if(arr[j]<arr[minIndex]){
                    minIndex = j;
                }
            }
            swap(arr,i,minIndex);
        }
    }

    private static void swap(Integer[] arr, int i, int minIndex) {
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;

    }

}

核心代码讲解

for(int i=0;i<n;i++){
    int minIndex = i;
    for(int j=i+1;j<n;j++){
         if(arr[j]<arr[minIndex]){
             minIndex = j;
        }
    }
    swap(arr,i,minIndex);
}

代码中用minIndex变量指向每一次排序数据元素中最小的元素的位置。
第一趟循环时:i=0,j=1,查找arr[0,n)中最小元素,记录该最小元素的下标minIndex,最后交换下标为i,minIndex的元素

第二趟循环:i=1,j=2。内层循环为:for(int j=j+1;j<n;j++)即:这时比较数组时从第三个元素和第二个元素开始进行计较。因为一个元素在一趟循环时已经是确定是最小的了。这次循环找到arr[1,n)中最小的数据元素,然后放到i=1的位置

时间复杂度

通过两层的for循环 可以知道选择排序的时间复杂度为O(n^2)

以上内容有表述不当或有误的地方,欢迎指出!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值