第一篇技术博客

  俗话说:万事开头难。我注册了博客园一年多了,本来一直想坚持写写博客,锻炼一下自己的思维,更重要的是培养对技术的兴趣,感受技术的魅力。还有一个目的是,将自己在工作中遇到的问题以及想法做一个总结,方便以后查阅和更新。希望每天都能进步一点。

  废话不多说,现进入正题。作为一个Java开发工程师,今天要讲的话题是关于数组排序的方法,包括:冒泡排序法、选择排序法。有不妥之处还请各路大神不吝赐教。

  1.冒泡排序法

定义:所谓冒泡排序法顾名思义是对这种排序方法的比喻,其原理是:循环遍历数组中的元素,就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。

  举例:

   public static void bubbleSortSequence(int []arr) {
               int[] arr = {72,23,34,27,66,56,78};
        for(int i =0;i<arr.length-1;i++) { 
            for(int j=0;j<arr.length-i-1;j++) {//-1为了防止溢出
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                     
                    arr[j]=arr[j+1];
                     
                    arr[j+1]=temp;
            }
            }    
        }
    }

时间复杂度为O(n2)。关键的技术点:数组中两个元素交换位置时,需要定义一个第三方变量。这个第三方变量起着媒介的作用。类比生活中的例子:

有A、B、C三个等量的杯子,其中A中盛的是水,B中盛的是饮料,C为空杯。若想将A中的水与B中的饮料交换一下位置,则需要空杯容器C来做媒介。

也可以用位异或运算来实现。代码如下:

 public static void bubbleSortSequence(int []arr) {
               int[] arr = {72,23,34,27,66,56,78};
        for(int i =0;i<arr.length-1;i++) { 
            for(int j=0;j<arr.length-i-1;j++) {//-1为了防止溢出
                if(arr[j]>arr[j+1]) {
                    arr[j]=arr[j]^arr[j+1];              
                    arr[j+1]=arr[j]^arr[j+1];
                    arr[j]=arr[j]^arr[j+1]; 
                }
            }    
        }
    }

    2.选择排序法

 定义:是一种能将一串数据依照特定的方式进行排列的方法。其原理:在需要排序的一组数中,选出最小(或最大)的一个数与第一个位置的数交换;在剩下的数当中找最小的数与第二个位置的数交换,即顺序放在已排好序的数列的最后,如此循环,直到全部数据元素排完为止

举例如下:

public static void selectSequence(int[] arr) {
       //定义最小元素的下标和一个临时变量
        int min, temp;
        for (int i = 0; i < arr.length; i++) {
            // 初始化最小数据数组下标
            min = i;
            for (int j = i+1; j < arr.length; j++) {
                // 在未排序元素中继续寻找最小元素,赋值给最小值的下标
                if (arr[j] < arr[min]) {
                    min = j;
                }
            }
            // 将最小元素放到已排序列末尾
            if (min != i) {
                temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
    }

  这里稍微比较难理解的是最小元素的一直在变化,其实仔细推理一下,不难明白这个最小元素不是单单指此数组中的最小元素,而是此组数中未排序数列的最小元素。这个算法的时间复杂度也为O(n2)。

做成比做好更重要
原文地址:https://www.cnblogs.com/fruit1024/p/11111354.html