高级选择排序(详解)

为什么说这个选择排序是高级的选择排序?

嗯…这个是相对于选择排序来说的
链接:选择排序
高级选择排序和选择排序的最大的区别:

选择排序:
每次都要和自己以下的下标进行互换
(如果是升序就是大于的互换,如果是降序就是小于的互换)
这样可能要互换很多次

高级选择排序:
只需要换一次,就可以把该换的的换好

这里用的是java的语法
假设我们定义int[] arr = {5, 10, 6, 12, 3};

高级选择排序图解(图很多下面有链接可以直接下载看):
.
.

这里用升举例
画个图是这样的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后把第二个数组的数值给到 temp, 下标给到mark;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后把第三个数组的数值给到 temp, 下标给到mark;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后把第三四数组的数值给到 temp, 下标给到mark;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图片链接:百度网盘

下面是java源代码

public class day05_10 {     //类名
    public static void main(String[] args){         //主函数
        int[] arr = {5, 10, 6, 12, 3};

        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++)
        {
            int temp = arr[i];  //记录数组的值
            int mark = i;       //记录下标
            for(int j = 1+i; j < arr.length; j++)
            {
                if(temp > arr[j])
                {
                    temp = arr[j];
                    mark = j;
                }
            }
            int snap = arr[i]; //snap 用于两个数互换的媒介
            arr[i] = arr[mark];
            arr[mark] = snap;
        }
        System.out.print("排序后:");
        for(int i =0; i < arr.length; i++)              //输出排序后的
        {
            System.out.print("arr["+i+"]="+arr[i]+"  ");
        }

    }
}

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

/*
    演示高级选择排序--函数功能
 */
package day05;      //包名

public class day05_11 {     //类名
    public static void main(String[] args){ //主函数
        int[] arr = {5, 10, 6, 12, 3};
        printArr(arr);  //输出排序前
        sort(arr);      //排序
        printArr(arr);  //输出排序后
    }
    
    //函数功能高级选择排序
    public static void sort(int[] arr){
        for(int i = 0; i < arr.length-1; i++)
        {
            int temp = arr[i];          //记录数组的值
            int mark = i;               //记录下标
            for(int j = 1+i; j < arr.length; j++)
            {
                if(temp > arr[j])
                {
                    temp = arr[j];

                    mark = j;
                }
            }
            swap(arr, i, mark);
        }
    }

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值