zoukankan      html  css  js  c++  java
  • 数组的选择排序

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

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


    例如: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; 

                                 }   

                          }
                  }
           }
    }

  • 相关阅读:
    小故事
    设计模式
    git分支
    git简单操作
    ab命令压力测试
    libcheck ARM交叉编译
    libxml2 ARM 交叉编译
    I.MX6 安装LTIB
    为ARM编译Glib
    QT 4.8 中文显示问题
  • 原文地址:https://www.cnblogs.com/qiaoqiaoli/p/10746550.html
Copyright © 2011-2022 走看看