zoukankan      html  css  js  c++  java
  • 第一篇技术博客

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

      废话不多说,现进入正题。作为一个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)。

    做成比做好更重要
  • 相关阅读:
    Django-4
    Django-3
    博客中涉及的源码下载
    源码阅读系列:EventBus
    使用DFA做文本编辑器的自动提示
    计算机网络-IP类型判断
    感兴趣的文章搜集
    The Engine Document of JustWeEngine
    [译文]选择使用正确的 Markdown Parser
    Android源码阅读-Filter过滤器
  • 原文地址:https://www.cnblogs.com/fruit1024/p/11111354.html
Copyright © 2011-2022 走看看