数组的选择排序

Posted qiaoqiaoli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的选择排序相关的知识,希望对你有一定的参考价值。

选择排序:是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

原理:首先用第一个元素和后面的每一个元素进行比较,如果后面有比第一个元素小的就交换这两个元素
          比较下来会得到第最小的一个元素,放在第一个位置,然后依次拿着后面每一个元素依次这样比较,
          每次都会得到一个最小的元素,排序完就是从小到大排序


例如:int[] arr={31,23,79,65,16}   arr.length=5,将这个数组arr安照选择排序算法来重新排序

思路分析:
第一轮比较:                                                    i=0时,j=1,2,3,4 (即j=1;j<5;j++)
   {31,23,79,65,16}  31>23  交换   arr[0]与arr[1]比较--->j=1:arr[0] 比 arr[1]=arr[j]   
   {23,31,79,65,16}  23<79  不交换 arr[0]与arr[2]比较--->j=2:arr[0] 比 arr[2]=arr[j]
   {23,31,79,65,16}  23<65  不交换 arr[0]与arr[3]比较--->j=3:arr[0] 比 arr[3]=arr[j]
   {23,31,79,65,16}  23>16  交换   arr[0]与arr[4]比较--->j=4:arr[0] 比 arr[4]=arr[j]
最终排序{16,31,79,65,23}得出一个最小元素arr[0]=16放在首位          i=0,arr[0]=arr[i]

第二轮比较:                                                   i=1时,j=2,3,4 (即j=2;j<5;j++)
   {31,79,65,23}   31<79  不交换  arr[1]与arr[2]比较--->j=2:arr[1] 比 arr[2]
   {31,79,65,23}   31<65  不交换  arr[1]与arr[3]比较--->j=3:arr[1] 比 arr[3]
   {31,79,65,23}   31>23  交换    arr[1]与arr[4]比较--->j=4:arr[1] 比 arr[4]
   最终排序{23,79,65,31}  得出一个最小元素arr[1]=23     此时还是arr[i]与arr[j]相比

第三轮比较:                                            i=2时,j=3,4 (即j=3;j<5;j++)
   {79,65,31}   79>65  交换  arr[2]与arr[3]比较--->j=3:arr[2] 比 arr[3]
   {65,79,31}   65>31  交换  arr[2]与arr[4]比较--->j=4:arr[2] 比 arr[4]
   最终排序{31,79,65}  得出一个最小元素arr[2]=31     此时还是arr[i]与arr[j]相比

第四轮比较:                                         i=3时,j=4 (即j=4;j<5;j++)
   {79,65}   79>65   交换   arr[3]与arr[4]比较--->j=4:arr[2] 比 arr[4]
   最终得出小的元素是arr[3]=65

i=0时,j=1,2,3,4 (即j=1;j<5;j++)                         i=0,?=1
i=1时,j=2,3,4    (即j=2;j<5;j++)-->j=?;j<5;j++    i=1,?=2 ======》?=i+1
i=2时,j=3,4       (即j=3;j<5;j++)                         i=2,?=3
i=3时,j=4          (即j=4;j<5;j++)                         i=3,?=4
  从上面可以看出还是四轮循环,每轮里面又进行循环,外层是i=0;i<arr.length-1;i++
  而内层是j=i+1;j<arr.length;j++

代码实现如下:
public class ArrayDemo{
   public static void main(String[] args){
           //1.定义一个数组
           int[] arr={31,23,79,65,16};

          //2.调用selectSort方法
          selectSort(arr);

         //3.将排序完的数组打印出来,即遍历
           for(int i=0; i<arr.length; i++){
              System.out.println(arr[i]);

             }
      }
    
    //将上述第二步拿下来定义成一个方法
    //参数:方法里面不断改变的值,即数组,随便给一个数组都可以用这个方法排序
    //返回值:最后结果是排序数组,没有计算值,不需要返回值
      public static void selectSort(int[] arr){
            //2.用选择排序对数组进行排序
            for(int i=0; i<arr.length-1; i++){ //控制外层循环
                     for(int j=i+1; j<arr.length; j++){ //控制里层循环
                            if(arr[i]>arr[j]){     //循环里面将arr[i]与arr[j]相比,满足条件就交换
                                   int temp=arr[i];
                                   arr[i]=arr[j];
                                   arr[j]=temp; 

                             }   

                      }
              }
       }
}



























































以上是关于数组的选择排序的主要内容,如果未能解决你的问题,请参考以下文章

20191209-八大排序之选择排序

这才是选择排序正确的打开方式

排序--选择排序Selection Sort Java实现

选择排序算法

选择排序算法

算法通关手册 刷题笔记2 数组排序之冒泡排序选择排序