冒泡排序:
比较相邻两个元素的关键字值,如果反序,则交换。若按升序排序,每一趟将被扫描的数据序列中的最大元素交换到最后位置,就像气泡从水里冒出来一样。
复杂度分析:
数据的初始序列已排序,只需要一趟扫描,比较次数为n,移动次数为0,时间复杂度是O(N)
数据的初始序列反序排序,需要进行n-1趟扫描,时间复杂度是O(N2)
冒泡排序的平均时间复杂度是O(N2),每次交换需要一个辅助空间, 空间复杂度是O(1)
用java实现冒泡排序的代码如下:
/** * 冒泡排序:依次比较相临元素,如果反序则进行交换,经过一趟比较交换之后,最小的元素就会放到最前面的位置,然后第二趟从第二个元素开始进行相同的操作,经过n-1趟比较之后就是排好序的序列 * case1:null * case2:{} * case3:{1} * case4:{1,2,3,4,5} * case5:{5,4,3,2,1} * case6:{1,5,4,3,8} * 经过n-1趟比较,第i趟比较n-i次 * 最坏情况是序列反序,时间复杂度O(n^2),空间复杂度O(1) * 最好情况是序列已正序排好,时间复杂度O(N),空间复杂度O(1) * 平均复杂度O(n^2),空间复杂度O(1) * @param array1 */ public static void bubbleSort(int[] array1){ if(array1!=null) { int n = array1.length; if (n > 1) { boolean isExchange = true; for (int i = 1; isExchange&&i <= n - 1; i++) { isExchange = false; for (int j = 0; j <= n - 1 - i; j++) { if (array1[j] > array1[j + 1]) { int temp = array1[j]; array1[j] = array1[j + 1]; array1[j + 1] = temp; isExchange = true; } } } } } }