数组排序方法

2020-12-11  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读