排序:选择排序

目录

一.选择排序介绍:

二.选择排序的基本步骤:

三.选择排序的java代码实现:

1.最小的元素放在最左端(升序)

1.最大的元素放在最右端(升序) 

总结


一.选择排序介绍:

        选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

二.选择排序的基本步骤:

  1. 初始化:将一个记录的关键字存放到最小值记录位置。

  2. 从第一个记录开始,到倒数第二个记录止,逐个与最小值记录的关键字比较。

  3. 如果发现小于最小值记录的关键字,则将该关键字记录放到最小值记录的位置

  4. 重复第2步和第3步,直到遍历结束

  5. 此时,最小值记录就到了序列的起始位置,将最小值记录移到序列的起始位置。

  6. 然后,对剩下的未排序记录重复上述过程,直到所有记录排序完成。

三.选择排序的java代码实现:

1.最小的元素放在最左端(升序)

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr={7,4,5,9,8,2,1};
        int n=arr.length;
        int temp;
        // 外循环:从第一个元素到倒数第二个元素
        for (int i = 0; i < n - 1; i++) {
            //假设当前索引是最小的;
            int min_idx=i;
            for (int j =i+1; j < n; j++) {
                if(arr[j]<arr[min_idx]){
                    //如果找到了一个更小的元素,更新最小元素的索引;
                    min_idx=j;
                }
            }//将最小的元素交换到它应该在的位置;
            temp=arr[i];
            arr[i]=arr[min_idx];
            arr[min_idx]=temp;
        }
        for (int i : arr) {
            System.out.print(i+" ");
        }
    }
}

1.最大的元素放在最右端(升序) 

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr={7,4,5,9,8,2,1};
        int n=arr.length;
        int temp;
        // 外循环:从最后一个元素到第二个元素
        for (int i = n-1; i > 0; i--) {
            //假设当前索引是最大的;
            int max_idx=i;
            for (int j =i-1; j >= 0; j--) {
                if(arr[j]>arr[max_idx]){
                    //如果找到了一个更大的元素,更新最大元素的索引;
                    max_idx=j;
                }
            }//将最大的元素交换到它应该在的位置;
            temp=arr[i];
            arr[i]=arr[max_idx];
            arr[max_idx]=temp;
        }
        for (int i : arr) {
            System.out.print(i+" ");
        }
    }
}

总结

        选择排序的时间复杂度为O(n^2),因为它需要遍历数组来查找每个位置上的最小(或最大)元素。尽管它的效率不是特别高,但是选择排序算法因其简单性而在某些情况下仍然有用。特别是当内存很宝贵时,选择排序可以避免使用额外的空间,因为它不需要像归并排序那样使用额外的数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值