冒泡排序和选择排序

概念

时间复杂度:一段程序运行所需要的的时间
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<…<O(2n)<O(n!)
空间复杂度:一顿程序运行所占用的内存空间

冒泡排序和选择排序_第1张图片

算法分析

1、冒泡排序
主体思想:通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6和4无需交换。6和8交换,变成3,5,4,6,8。这样一次冒泡就完了,把最小的数3排到最前面了。对剩下的序列依次冒泡就会得到一个有序序列。冒泡排序的时间复杂度为O(n^2)

public static void main(String[] args) {
        //初始化数组
        int[] arr = {5,3,8,6,4};
        //判断数组的长度
        if (arr ==  null || arr.length == 0) {
            System.out.println("数组长度为空");
        }
        //循环执行
        for (int i = 0; i < arr.length-1; i++) {
            //从最后一个元素开始进行交换
            for (int j = arr.length-1; j > i; j--) {
                //如果后面的元素比前面的元素小
                if (arr[j] < arr[j-1]) {
                    //进行交换位置
                    int temp = arr[j-1];    //将小的数字地址存放到临时点
                    arr[j-1] = arr[j];      //将大的数字地址赋值给后面的
                    arr[j] = temp;          //将临时点的地址值存放到前面
                }
            }
        }
        //循环输出所有的元素
        for (int i : arr) {
            System.out.println(i);
        }
    }

显示效果如下
冒泡排序和选择排序_第2张图片
2、选择排序
冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体【对后面的每一个数字进行比较】的选择。举个栗子,对5,3,8,6,4这个无序序列进行简单选择排序,首先要选择5以外的最小数来和5交换,也就是选择3和5交换,一次排序后就变成了3,5,8,6,4.对剩下的序列一次进行选择和交换,最终就会得到一个有序序列。其实选择排序可以看成冒泡排序的优化,因为其目的相同,只是选择排序只有在确定了最小数的前提下才进行交换,大大减少了交换的次数。选择排序的时间复杂度为O(n^2)

public static void main(String[] args) {
        //初始化数组
        int[] arr = {5,3,8,6,4};
        //判断数组的长度
        if (arr ==  null || arr.length == 0) {
            System.out.println("数组长度为空");
        }
        //循环比较 N-1次
        for (int i = 0; i < arr.length-1; i++) {
            //定义最小值所在的索引下标
            int minIndex = i;
            //每轮需要比较的次数 N-i
            for (int j = i+1; j<arr.length; j++) {	//从第一个数到最后一个数字逐一进行比较
                //判断当前的的数是否比最小值大
                if (arr[j] < arr[minIndex]) {
                    //记录下标
                    minIndex =  j;
                }
            }
            //将找到的最小值和i位置所在的值进行交换
            if (minIndex != i) {
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
        for (int i : arr) {
            System.out.println(i);
        }


    }

显示效果如下:
冒泡排序和选择排序_第3张图片

你可能感兴趣的:(JAVA,排序算法,算法,数据结构)