选择排序详解

什么是选择排序呢?

就是数组的第一个与后面全部比较一次, 然后把最大或最小的放在第一个
然后用数组的第二个与后面全部又比较一次,然后还是继续把最大或者最小的放在第一个

.
这里我用Java的语法假设我们定义了一个数组a[5],然后赋值.

   int[] arr = {10, 8, 21, 6, 19};

画个图是这样的
下标为0的开始的进行比较
在这里插入图片描述
我们求它的升序-----也就是说从小到大

然后我们要知道选择排序是这样的,就是下标0的数依次和其它下标进行比较,
然后得出第一个最小值.
然后在用下标1继续依次和除0和本身以外的下标进行比较,得到第二个最小值.
依次类推.

画图是这样的(图很多下面有链接可以直接下载看)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
然后接着进行下标为1的进行比较
在这里插入图片描述在这里插入图片描述在这里插入图片描述
然后接着进行下标为2的进行比较
在这里插入图片描述在这里插入图片描述
然后接着进行下标为3的进行比较在这里插入图片描述

    最后一个下标因为没有可以比较的,所以就不需要比较了.
 	就这样我们完成了选择排序.

简略型图解
在这里插入图片描述
图片链接:百度网盘

下面是java源代码

public class day05_06 {         //类名
    public static void main(String[] args){ //主函数

        int[] arr = {10, 8, 21, 6, 19};         //定义数组
        int temp;                               //定一个临时变量, 可以进行互换

        System.out.print("排序前的数组:");
        for(int i = 0; i < arr.length; i++)             //排序前遍历输出
        {
            System.out.print("arr["+i+"]="+arr[i]+"   ");
        }
        System.out.println();   //换行

        for(int i = 0; i < arr.length-1; i++)     //因为最后一个不用进行比较,所以长度要减1
        {
            for(int j =i+1; j < arr.length; j++)  //每进行一轮i循环后,它就要变成下一个数组的元素,所以要i+1
            {
                if(arr[i] > arr[j])         //大于就互换, 因为这里是要升序
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.print("排序后的数组:");
        for(int i = 0; i < arr.length; i++)             //排序后遍历输出
        {
            System.out.print("arr["+i+"]="+arr[i]+"   ");
        }
    }
}

代码执行之后的结果
在这里插入图片描述
下面这个是利用自定义函数写的源代码:

public class day05_07 {         //类名
    public static void main(String[] args){

        int[] arr = {10, 8, 21, 6, 19};         //定义数组
        printArray(arr);                        //输出排序前的数组
        sort(arr);                              //排序
        printArray(arr);                        //输出排序后的数组
    }

    //函数功能:选择排序
    public static void sort(int[] arr){
        int temp;
        for(int i = 0; i < arr.length-1; i++)       //因为最后一个没有其它数可以比较所以减1
        {
            for(int j = 1 + i; j < arr.length; j++)
            {
                if(comparison(arr[i], arr[j]))
                {
                    swap(arr, i, j);
                }
            }
        }
    }

    //函数功能:比较两个数的大小,如果第一个大就true, 第二个大就false
    public static boolean comparison(int a, int b)
    {
        if(a>b)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    //函数功能:数值互换
    public static void swap(int[] arr , int i , int j)
    {
        int temp;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    //函数功能:输出数组
    public static void printArray(int[] arr)
    {
        for(int i = 0; i < arr.length; i++)
        {
            System.out.print("arr["+i+"]="+arr[i]+" ");
        }
        System.out.println();
    }
}

输出的结果还是和上图一样的,这里就不放出来了

不管用什么语言写代码,本质上都是这样子实现的!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,对象数组可以使用`Arrays.sort()`方法进行排序。`Arrays.sort()`方法有多种重载形式,可以根据不同的比较器进行排序,例如: ```java public static <T> void sort(T[] a, Comparator<? super T> c) ``` 其中,`a`参数是待排序的对象数组,`c`参数是比较器,用于指定排序的规则。 比较器是一个接口,通常使用Java 8中的lambda表达式来实现。比较器应该返回一个整数值,表示两个对象的大小关系。如果返回值小于0,则表示第一个对象小于第二个对象;如果返回值等于0,则表示两个对象相等;如果返回值大于0,则表示第一个对象大于第二个对象。 下面是一个示例,演示如何使用`Arrays.sort()`方法对对象数组进行排序: ```java class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } public class ObjectArraySortDemo { public static void main(String[] args) { Person[] persons = { new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 20) }; // 按年龄升序排序 Arrays.sort(persons, Comparator.comparingInt(person -> person.age)); // 输出排序后的结果 System.out.println(Arrays.toString(persons)); } } ``` 输出结果为: ``` [Person{name='Charlie', age=20}, Person{name='Alice', age=25}, Person{name='Bob', age=30}] ``` 在上面的示例中,我们创建了一个`Person`类,并创建了一个包含三个`Person`对象的数组。然后我们使用`Arrays.sort()`方法对数组进行排序排序的依据是`Person`对象的`age`属性,使用了`Comparator.comparingInt()`方法来指定按照`age`属性进行排序。最后,我们输出排序后的结果。 除了上面的示例中使用的`Comparator.comparingInt()`方法,还有其他的比较器可以使用,例如: - `Comparator.comparing()`:使用对象的某个属性进行排序; - `Comparator.reverseOrder()`:逆序排列; - `Comparator.naturalOrder()`:自然排序,用于实现`Comparable`接口的类; - 自定义比较器,实现`Comparator`接口的`compare()`方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值