关于数组排序问题的详细过程

/*  本博客是关于选择排序总结


1.首先我们要分析一下,排序这个问题。

    (1)既然要排序,那就必然要涉及比较。那么比较呢,那必然需要一个初始的参照物。

             如果没有一个初始参照物,那么我们的排序便不可能开始。

    (2) 有了初始参照物之后我们就要思考该怎么用,然后我们就想,既然是参照物,那么就有比较对象吧。

    (3) 至此我们有了参照物和需要和参照物比较的对象

    (4) 那么有了这些我们怎么让计算机给我们排序呢,我们知道计算机是0和1组成的,只会判断开和关,

             那要怎么完成这复杂的排序呢,

     (5)下面我们就结合实际生活,我们大多知道很多古装剧里都有比武招亲这招,怎么招呢?

          那就是上擂台,擂台上你行你上。像一般的神剧里,都是先上几个路人甲,然后是男主角,当然男主角肯定不一样,所以谁都打不过他,最后他最厉害,

          然后抱得美人归。

               那么依据这个思想:

                      1):我们先选一个人站擂,当然我们不知道这个人是男主角还是路人甲,但我们不管,就把它放上去。

                      2):然后让他们打,如果这个人是男主角,那么他会打遍天下无敌手,最后脱颖而出。

                                如果他是路人甲,那么遇到男主角,他会被男主角打败,这样的话男主角也会脱颖而出,现在知道路人甲为什么这么难赢了吧。

                              


      讲完了这些,我们再回到排序问题,结合程序讲

*/






package com.mignrisoft; //这是我的一个包,就不说明了


public class Demo25 {

public static void main(String[] agrs) {  //这是main主方法

int[] arr = { 1, 5, 2, 4, 6, 9 };//我们在这里面定义了一个数组
selectSort(arr);  //这是写的选择排序的单独调用(因为返回值是void,所以只能是单独调用,如果不明白可以去看看相关视频)
print(arr);//这里我们是将排序过后的数组遍历输出
}

// 数组排序(升序)

public static void selectSort(int[] arr) {//我们定义的数组排序的方法(返回值类型为void    参数列表只有一个数组类型)

int k, temp;//这里我们先定义两个int 类型的值,作为保存用
for (int i = 0; i < arr.length; i++) {

k = i;//这里我们是定义起始的参照对象也就是是第一个比较的数组值。这里我们把他赋值给k,让k去参与接下来的操作。


for (int j = k + 1; j < arr.length; j++) {  //我们定义j=k+1;为什么这样定义呢? 其实我是可以理解为k是第一个数,

                                                                                          那么我们要比较的那肯定是从第二个起了。

if (arr[j] < arr[k]) {  //这里我们开始比较了,如果第二个数是小于第一个数的(注意这里不一定是第二个数,我这么说只是方便理解),那么就交换值
k = j;

}

}

                       //上面的k值交换了,我们就要看一下他是否和原来的i相等,如果不等,那么说明做了一次交换值的操作,说明有值是小于初始的,那么我么就要把这个值给保存留                        值,并排在第一个。后面的以此类推

if (k != i) {
temp = arr[i];
arr[i] = arr[k];//执行交换值操作
arr[k] = temp;
}
}
}



private static void print(int[] arr) {  //这里是便利数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");//输出遍历后的数组
}
System.out.println();//换行
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值