zoukankan      html  css  js  c++  java
  • 数据结构(一)

    1.冒泡排序:

    用自己的话讲一下冒泡排序的过程:

    事例:有一个数组 [6,10,5,8,4,3],对该数组进行冒泡排序,设计两层循环,第一层循环,用来遍历总循环的次数,第二层循环用来扫描各个元素的值

    第一步:从第一个位置开始(指针直线6这个值),跟后一个位置(也就是第二个)的值比较,如果第二个值小于第一个值时,交换位置,并把指针+1,指向下一个位置。

        第一步结束后,数组为 [6,10,5,8,4,3]

    第二步:当前指针在第二位,也就是值为10的位置,5<10,所以交换位置,数组变为[6,5,10,8,4,3],交换值后,指针+1

    第三步:当前指针在第三位,也就是值为8的位置,8<10, 所以交换位置,数组变为[6,5,8,10,4,3],交换值后,指针+1

    第四步:当前指针在第四位,也就是值为4的位置,4<10, 所以交换位置,数组变为[6,5,8,4,10,3],交换值后,指针+1

    第五步:当前指针在第五位,也就是值为3的位置,3<10, 所以交换位置,数组变为[6,5,8,4,3,10],此时指针到达最后一个位置了,跳出第二层循环,将外层循环的指针加一

     代码:

      public static int[] bubbleSort(int[] arr){
            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+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
            return arr;
        }
    

      冒泡排序:最好的与最坏的情况下,遍历次数都一样,都是O(n^2)

    2.插入排序:

    用自己的话讲一下插入排序的过程:

    事例:有一个数组 [6,10,5,8,4,3],对该数组进行插入排序:

    第一步:从第二个位置开始(指针直线10这个值),跟前一个位置(也就是第一个)的值比较,如果第二个值小于第一个值时,交换位置,并把指针+1,指向下一个位置。

        第一步结束后,数组为 [6,10,5,8,4,3]

    第二步:当前指针在第三位,也就是值为5的位置,5<10,所以交换位置,数组变为[6,5,10,8,4,3],交换值后,前面有值,再跟前面的值对比,5<6,交换位置,数组变为[5,6,10,8,4,3],指针+1

    第三步:当前指针在第四位,也就是值为8的位置,8<10,所以交换位置,数组变为[5,6,8,10,4,3],交换值后,前面有值,再跟前面的值对比,8>6,无需交换位置,指针+1

    第四步:当前指针在第五位,也就是值为4的位置,4<10,所以交换位置,数组变为[5,6,8,4,10,3],交换值后,前面有值,再跟前面的值对比,4<8,交换位置,数组变为[5,6,4,8,10,3],

        交换值后,前面有值,再跟前面的值对比,4<6,交换位置,数组变为[5,4,6,8,10,3],交换值后,前面有值,再跟前面的值对比,4<5,交换位置,数组变为[4,5,6,8,10,3],指针+1

    第五步:当前指针在第六位,也就是值为3的位置,3<10,交换位置,数组变为[4,5,6,8,3,10],交换值后,前面有值,再跟前面的值对比,3<8,交换位置,数组变为[4,5,6,3,8,10],

        前面有值,再跟前面的值对比,3<6,[4,5,3,6,8,10],前面有值,再跟前面的值对比,3<5,[4,3,5,6,8,10],前面有值,再跟前面的值对比,3<4,[3,4,5,6,8,10],此时指针已经是最大了,推出循环,

        得到的就是插入排序后的数组[3,4,5,6,8,10]。

    编写插入排序代码:

    public class insertSort {
    
        public static int[] insertSortMethod(int[] arr){
            //首先遍历数组,从第二位开始
            for(int i = 1;i<arr.length;i++){
                //再遍历一下数组,让指针在的值与数组前面的值依次对比
                for(int j = i;j>0;j--){
                    if(arr[j]<arr[j-1]){
                        //如果后面的值小于前面的值,就进行交换
                        int temp = arr[j-1];
                        arr[j-1] = arr[j];
                        arr[j] = temp;
                    }else{
                        break;
                    }
                }
            }
    
            return arr;
        }
    
    
        public static void main(String[] args) {
            System.out.println("aaa");
            int[] arr = {6,10,5,8,4,3};
            int[] ints = insertSortMethod(arr);
            for (int i:
                    ints) {
                System.out.print(i+",");
    
            }
        }
    }
    

      

    插入排序的平均时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1),具体时间复杂度和数组的有序性也是有关联的。

    插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较 N-1 次,时间复杂度为 O(N)。

    最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是 O(n^2)。

    3.

  • 相关阅读:
    处理数据
    Vue--Vue常用指令及操作
    Vue--Vue实例
    ES6--解构赋值
    ES6--入门
    前端模块化开发
    Node.js--入门
    HTML5--canvas与svg的使用
    input整理
    移动端开发入门
  • 原文地址:https://www.cnblogs.com/takeyblogs/p/13932843.html
Copyright © 2011-2022 走看看