选择排序

1,一开始指针在第一位,比较后面的数组,寻找最小位,然后跟第一位替换。
2.第二次循环指针在第2位开始,N为now,I为现在的指向,min记录位置

在这里插入图片描述
5<4,min记录数字4的位置
在这里插入图片描述
跟min作比较,4<2,min记录数字2的位置
在这里插入图片描述
跟min作比较,3<2,min还是2的位置,保持不变
在这里插入图片描述
跟min作比较,8<2,min还是数字2的位置,保持不变
在这里插入图片描述
循环一轮结束,min为数字2的位置,跟N指针数字5的位置替换
在这里插入图片描述
下一轮循环,N指针指向数字4,以此类推
在这里插入图片描述

第一次循环

package com.my;

/**
 * 从左往右走,找到最小的替换
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] ints = new int[]{5,4,2,3,8};
        sort(ints);
        print(ints);
    }

    private static void sort(int[] ints) {
        //N为现在的位置,I为移动的指针,min记录最小位置
        int N=0,I=0,min=0;

        //第一次循环,I向右走
        for(int i=0;i<ints.length;i++){
            //比较大小,记录min位置
            if(ints[min]>ints[i]){
                min=i;//记录位置
            }
        }
        swap(ints,N,min);//替换位置


    }

    private static void swap(int[] ints,int a,int b){
        int temp = ints[a];
        ints[a] = ints[b];
        ints[b] = temp;
    }


    private static void print(int[] ints){
        for(int i:ints){
            System.out.print(i);
        }
    }
}

24538

以上是第一次循环,现在N指针向右走,加上一层循环min每次循环从N位置开始

package com.my;

/**
 * 从左往右走,找到最小的替换
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] ints = new int[]{5,4,2,3,8};
        sort(ints);
        print(ints);
    }

    private static void sort(int[] ints) {
        //N为现在的位置,I为移动的指针,min记录最小位置
        int N=0,I=0;

        for(int n=N;n<ints.length;n++){
            int min=n;
            //第一次循环,I向右走
            for(int i=n;i<ints.length;i++){
                //比较大小,记录min位置
                if(ints[min]>ints[i]){
                    min=i;//记录位置
                }
            }
            swap(ints,n,min);//替换位置
        }
    }

    private static void swap(int[] ints,int a,int b){
        int temp = ints[a];
        ints[a] = ints[b];
        ints[b] = temp;
    }


    private static void print(int[] ints){
        for(int i:ints){
            System.out.print(i);
        }
    }
}

优化N指针,I这里也是无效的

package com.my;

/**
 * 从左往右走,找到最小的替换
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] ints = new int[]{5,4,2,3,8};
        sort(ints);
        print(ints);
    }

    private static void sort(int[] ints) {
        //N为现在的位置,min记录最小位置
        for(int n=0;n<ints.length;n++){
            int min=n;//min每次循环从N位置开始
            //第一次循环,I向右走
            for(int i=n;i<ints.length;i++){
                //比较大小,记录min位置
                if(ints[min]>ints[i]){
                    min=i;//记录位置
                }
            }
            swap(ints,n,min);//替换位置
        }
    }

    private static void swap(int[] ints,int a,int b){
        int temp = ints[a];
        ints[a] = ints[b];
        ints[b] = temp;
    }


    private static void print(int[] ints){
        for(int i:ints){
            System.out.print(i);
        }
    }
}

23458
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值