美文网首页
数组排序方法

数组排序方法

作者: 逆水寒鲤 | 来源:发表于2020-12-11 16:08 被阅读0次

    以下内容仅作为我个人的学习参考进行记录:

    选择排序,是一种比较简单粗暴的排序方法,每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。类似于军训方阵按身高调整队列,挑选出一个目测最小的目标,然后以该目标为准,依次对比其他同学,比他大的站他后面,比他小的放他前面,然后以前面那名同学为目标继续重复执行操作。


    image.png

    以下为示例:

                    import java.util.Arrays;
                     /**
                      * 选择排序
                      * @author Administrator
                      *
                      */
                     public class Dome1 {
                                public static void main(String[] args) {
                                     //声明数组
                                     int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
                                    //因为是十位的数组,所以只需要比较九次即可,所以是arr.length -1
                                    //第一次循环,这是确定一个数依次和后面数的比较的数(找出第一个参考目标,通过与后面的数据进行比较得出,最小值和下标)
                                    for (int i = 0; i < arr.length -1 ; i++) {
                                       //这个是和第一个数的比较的数
                                        for (int j = i+1; j < arr.length; j++) {
                                          //定义一个临时的变量,用来交换变量
                                          //如果不定义临时变量,直接交换,数值会出问题
                                           int temp ;  
                                          //如果第一个数大于第二个比较的数,例如i=3>j=2,则开始交换位置
                                           if(arr[i]>arr[j]){
                                          //将大的那个值赋予临时变量,即temp=i=3
                                                temp =  arr[i];
                                          //比测出来最小的那个值j=2,跟原参考值i=3作位置调换,即 arr = {2,3};
                                                arr[i] = arr[j];
                                                arr[j] = temp;
                                           }
                                       }
                                    }
                            //打印最后的排序结果
                            System.out.println(Arrays.toString(arr));
                             }
                    }
    

    冒泡排序,意为:越小的元素会经由交换慢慢“浮”到数列的顶端。

    运作机制:
    依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

    1031841-20190531163708186-1703601448.gif

    以下为示例:

                import java.util.Arrays;
               /**
                * 冒泡排序
                * 此顺序为从大到小排序,如想得到相反结果,只需要arr[j]<arr[j+1]即可
                *@author Administrator
                */
                  public class Dome2 {
                        public static void main(String[] args) {
                           //数组
                           int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
                           //外部循环
                           for(int i=0;i<arr.length-1;i++){
                                //相连两个数的索引是利用内部循环
                                for(int j=0;j<arr.length-1;j++){
                                //同样利用中间变量,注意区分与选择排序的区分
                                     if(arr[j]>arr[j+1]){
                                         int temp=arr[j];
                                         arr[j]=arr[j+1];
                                         arr[j+1]=temp;
                                    }
                               }
                           }
                            System.out.println(Arrays.toString(arr));
                     }
                 }
    

    剩余的模式暂时还不理解,待熟悉后继续更新
    参考:
    https://www.cnblogs.com/taotingkai/p/6214367.html
    https://www.liaoxuefeng.com/wiki/1252599548343744/1259543088592672
    https://www.cnblogs.com/xiaoming0601/p/5866048.html

    相关文章

      网友评论

          本文标题:数组排序方法

          本文链接:https://www.haomeiwen.com/subject/nywqiktx.html