Java算法之选择排序(selection sort)

今天突发奇想想写一个关于算法的文章,然后就从最简单,基础的选择排序开始吧!

实现原理:

选择排序是将数组中最小数的下表记录起来,然后在根据下标将最小的数和第一个数换一下位置。
总代码

public static void main(String[] args) {
    int [] intArr = {5,6,1,2,3,4,8,7,9};
    for (int j = 0; j < intArr.length-1; j++) {
        int minIndex = j;
        for (int i = j+1; i < intArr.length; i++) {
            if (intArr[minIndex]>intArr[i]){
                minIndex = i;
            }
        }
        int temp = intArr[j];
        intArr[j] = intArr[minIndex];
        intArr[minIndex] = temp;
        System.out.println("minIndex:"+minIndex);
    }
    for (int i = 0; i < intArr.length; i++) {
      System.out.print(intArr[i]+" ");
    }
  }

讲解:首先我们先把代码拆分成三部分实现

  1. 我们先从数组中的第一位数值开始。找到数组中数值最小的下标,并将最小的数放到第一位。
public static void main(String[] args) {
    int [] intArr = {5,6,1,2,3,4,8,7,9};
    int minIndex = 0;
    for (int i = 1; i < intArr.length; i++) {
        if (intArr[minIndex]>intArr[i]){
            minIndex = i;
        }
    }
    System.out.println("minIndex:"+minIndex);
    for (int i = 0; i < intArr.length; i++) {
      System.out.print(intArr[i]+" ");
    }
  }

最小的数的下表我们已经找到了,然后第二部将最小的数值放到第一位

 public static void main(String[] args) {
    int [] intArr = {5,6,1,2,3,4,8,7,9};
    int minIndex = 0;
    for (int i = 1; i < intArr.length; i++) {
        if (intArr[minIndex]>intArr[i]){
            minIndex = i;
        }
    }
    int temp = intArr[0];
    intArr[0] = intArr[minIndex];
    intArr[minIndex] = temp;
    System.out.println("minIndex:"+minIndex);
    for (int i = 0; i < intArr.length; i++) {
      System.out.print(intArr[i]+" ");
    }
  }

现在我们已经把最小的数放到了数组的第一位,现在我们开始循环其他的数,怎么将其他的数也相应的进行排序哪?
思路,我要想将其他的数也进行排序那首先我应该去循环他们,然后比较他们的大小。所以我在上一步的基础上在上一步的循环外面加了一层循环。让每个数值都去对比一边。
总体代码讲解:
现在的minIndex不能是0了。应该是最外层循环的次数。内循环的开始下标也应该是外循环加1开始本次内循环。这个为什么要这样那?我不知道改怎么组织语言给你讲。你自己打个debug一步一步的看看吧。
最后说的是“intArr.length-1”这个是因为当循环到倒数第一位的时候,这个时候就没必要将他和他自己进行比较了。

public static void main(String[] args) {
    int [] intArr = {5,6,1,2,3,4,8,7,9};
    for (int j = 0; j < intArr.length-1; j++) {
        int minIndex = j;
        for (int i = j+1; i < intArr.length; i++) {
            if (intArr[minIndex]>intArr[i]){
                minIndex = i;
            }
        }
        int temp = intArr[j];
        intArr[j] = intArr[minIndex];
        intArr[minIndex] = temp;
        System.out.println("minIndex:"+minIndex);
    }
    for (int i = 0; i < intArr.length; i++) {
      System.out.print(intArr[i]+" ");
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值