算法(一)冒泡排序

排序原理

当我们对一个数组进行冒泡排序的时候,我们可以把数组中的每个元素看做是一个一个的气泡,元素值较大的我们看成是重气泡,元素值较小的我们看成是轻气炮。根据生活常识我们知道,在水里,轻气炮肯定排在重气泡的前边,我们如何将轻重气泡按照我们知道的生活常识方式进行排序呢。这种这种排序的方式我们成冒泡排序。
所谓的冒泡排序就是对数组中的元素进行两两比较,如:第一次排序的第一步是我们对数组下标为0和1的两个元素进行比较,第二步为如果下标为0的元素比下标为1的元素大,我们就交换他们的位置,否则什么做,继续进行下一次排序,下一次排序为下标为1的元素与下标为2的元素进行比较,然后重复第一次排序的第二个步骤,以此往复,直到内层循环结束,最重的气泡已经排在了最后了。然后外层循环进行下一次循环,直到整个外循环结束,数组就已经排好序了。冒泡排序是就地排序,是稳定的。冒泡排序属于交换排序的一种。
在这里插入图片描述

时间复杂度

  • 当数组为有序的,只需要一趟排序,元素之间的比较次数为n-1次,移动元素的次时为0次,此时时间复杂度为O(n)。
  • 当数组为反序的,需要n-1趟排序,每趟排序元素之间比较次数为n-i此,比较次数达到了最大值n*(n-2)/2,别切没元素的移动需要三个步骤,移动次数也达到了最大值3*n(n-2)/2,所以当数组反序的时候冒泡排序的时间复杂第为O(n2)。

排序代码

package com.alg.sort;

/**
 * 冒泡排序
 */
public class BubbleSort {

    /**
     * 冒泡排序算法
     */
    public void bubbleSort(int[] arr, int a, int n) {
        for (int i = a; i < n; i++) {
        	//两两比较,并为之交换
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[i]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
    }
}
发布了94 篇原创文章 · 获赞 55 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Suubyy/article/details/100034085