学习数据结构与算法之美系列之冒泡排序、选择排序

我这样学习数据结构与算法之冒泡排序、选择排序

什么是冒泡排序?
  冒泡排序是⼀种简单的排序算法。它重复地⾛访过要排序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。⾛访数列的⼯作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越⼤的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序的特点?
  1.i 从0开始, i 与 i+1 ⽐较,如果 i>i+1 ,那么就互换;
  2. i 不断增加,直到 i<n-1 (n是数组元素的个数, n-1 是数组已经最后⼀个元素) ,⼀趟下来,可以让数组元素中最大值排在数组的最后面。
代码如下:

int[] arr={4,7,9,2,4,5,6};
  /**
     * 冒泡排序
     *   flag用于标识 是否需要排序,如果无需排序直接跳出循环,不再做无用比较
     *   冒泡排序是稳定排序,因为如果出现同样的元素,不会发生位置互换
     *   冒泡排序是使用两层for循环
     *   算法描述:
     * 1.	i从0开始,i与i+1比较,如果i>i+1,那么就互换
     * 2.	i不断增加,直到i<n-1(n是数组元素的个数,n-1是数组已经最后一个元素) ,一趟下来,可以让数组元素中最大值排在数组的最后面
     */
    public void bubbleSorting(){
            int tmp;//存放临时变量
            int flag; //记录是否发生置换
            for(int i=0;i<arr.length-1;i++){
                flag=0;
                for(int j=0;j<arr.length-i-1;j++){
                    if(arr[j]>arr[j+1]){
                        tmp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=tmp ;
                        flag=1;
                    }
                }
                if(flag==0){
                    break;
                }
            }
            System.out.println("冒泡排序的结果是"+Arrays.toString(arr));
        }

什么是选择排序?
   选择排序(Selection sort)是⼀种简单直观的排序算法。它的⼯作原理是每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始(末尾)位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序⽅法(⽐如序列[4, 4, 2]第⼀次就将第⼀个[4]与[2]交换,导致第⼀个4挪动到第⼆个4后⾯)。
选择排序的特点?
  1.每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,直到全部待排序的数据元素排完;
  2.每交换1次,再次找最大值时就将范围缩小1;
  3.查询当前趟数最大值实际上不用知道最大值是多少,知道它的数组角标即可,交换也是根据角标来进行交换。

代码如下:

int[] arr={4,7,9,2,4,5,6};
/**
     * 选择排序
     *
     * 是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,直到全部待排序的数据元素排完。
     * 选择排序是不稳定的排序方法(比如序列[4, 4, 1]第一次就将第一个[4]与[1]交换,导致第一个4挪动到第二个4后面)。
     */
    public void selectionSorting(){
       int pos ; //记录最大元素的角标
        int tmp ; //记录交换的变量
        for (int i=0;i<arr.length-1;i++){
            pos=0;
            //内层循环控制遍历数组的个数并得到最大数的角标
            for(int j=0;j<arr.length-i;j++){
                if(arr[j]>arr[pos]){
                    pos=j;
                }
                //开始交换
                tmp=arr[pos];
                arr[pos]=arr[arr.length-1-i];
                arr[arr.length-1-i]=tmp;
            }
        }
        System.out.println("选择排序的结果"+Arrays.toString(arr));
    }

猜你喜欢

转载自blog.csdn.net/weixin_39446297/article/details/106091128
今日推荐