排序算法——选择排序

来源:互联网 发布:一览 mac 编辑:程序博客网 时间:2024/06/06 08:48
选择排序(Selection Sort):    1.基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可    2.可以看出选择排序,第一轮会选出最小值,第二轮会选出第二个小的值,直到最后,第一轮从arr[0]和后面元素相比较,第二轮从arr[1]和后面的元素相比较,依次类推,N个元素要进行N-1轮,选择排序每一轮只进行一次交换,相对于冒泡排序效率高一些,有N个元素,所以有N-1轮比较,第M轮比较的是N-M次    3.相对于冒泡排序的优点:选择排序是可以从某一个元素开始,冒泡排序不可以,选择排序是依次比较两个元素,求得是最小值,冒泡排序是从头到尾依次比较两个相邻元素,求得是最大值。

这里写图片描述

public class SelectSortDemo {    public static void main(String[] args){        //将数组arr定义为int类型的        int[] arr=new int[]{4,3,7,2,9,8,1};        printArr(arr);      //输出使用选择排序之前的数组        selectSort(arr);        printArr(arr);      //输出使用选择排序之后的数组    }                       //输出为[1,2,3,4,7,8,9]    static void selectSort(int[] arr){        /*        //第一轮        for(int i=1;i<arr.length;i++){            if(arr[0]>arr[i]){                swap(arr,0,i);  //使用arr,0,i是因为在数组中要想调换元素,必须根据数组的索引从头到尾都不会变的原则,即可以这样解释arr[0]=某个数,某个数可以赋值给                                arr[0]的,这就是为什么不使用swap(arr[0],arr[i])的缘故。使用swap(arr[0],arr[i])从根本上是没有改变什么的,所以也不会                                发生元素的调换,在数组中最重要的的注意元素的索引是固定的。所以不管调换元素值都要利用其索引。            }        }        //第二轮        for(int i=2;i<=arr.length-1;i++){            if(arr[1]>arr[i]){                swap(arr,1,i);            }        }        //第三轮        for(int i=4;i<=arr.length-1;i++){            if(arr[2]>arr[i]){                swap(arr,2,i);            }        }        */        //所以得出的最终结果是        for(int time = 1;time<=arr.length-1;time++){    //time代表的是第几个元素,相对应的time-1对应的是该元素的索引位置,            for(int i=time;i<=arr.length-1;i++){                if(arr[time-1]>arr[i]){                    swap(arr,time-1,i);                 }            }        }    }    //将数组元素进行交换    static void swap(int[] arr,int index1,int index2){        int temp = arr[index1];        arr[index1] = arr[index2];        arr[index2] = temp;    }    //将数组元素进行打印    static void printArr(int[] arr){        String ret = "[";        for(int i=0;i<arr.length;i++){            ret = ret + arr[i];            if(i!=arr.length-1){                ret = ret + ",";            }        }        ret = ret + "]";        System.out.println(ret);        }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 进网许可丢了怎么办 华为稳私空间被稳蔵怎么办 华为手机安装不了软件怎么办 华为手机自动安装软件怎么办 手机在实体店买贵了怎么办 日本买的kindle坏了怎么办 华为麦芒4屏幕失灵怎么办 华为麦芒6屏幕失灵怎么办 手机为什么总显示内存不足怎么办 小米云服务满了怎么办 魅蓝s6声音小怎么办 华为畅享7s丢失怎么办 华为耳机孔坏了怎么办 苹果手机耳机插孔坏了怎么办 荣耀8听筒声音小怎么办 荣耀8听筒音量小怎么办 华为荣耀6声音小怎么办 华为荣耀v8通话声音小怎么办 华为p20没有耳机孔怎么办 华为荣耀手机耳机声音小怎么办 小米5x显示耳机怎么办 手机进水听音乐人声小怎么办 华为荣耀v8手机音量小怎么办 手机充电孔松了怎么办 华为荣耀7卡顿怎么办 华为手机话筒没声音怎么办 苹果x耳机进水了怎么办 苹果6p进水了怎么办 华为手机声音变耳机模式怎么办 手机设置成耳机模式怎么办 opop耳机一个没有声音怎么办 oppo手机上显示耳机模式怎么办 微信显示耳机模式怎么办 微信变成耳机模式怎么办 5s变成耳机模式怎么办 华为手机一直是耳机模式怎么办 华为手机进水了耳机模式怎么办 蓝牙耳机通话声音小怎么办 华为手机自动进入耳机模式怎么办 华为手机耳机怎么挂了电话怎么办 华为手机听筒声音小怎么办