冒泡排序,是我们学习数据结构第一个排序算法,也是一种最常见和简单的排序算法。
排序原理:
我们把一个数组从左到右依次两两元素比较,比较完成一趟后,能确定最大(最小)值,放在最右边(最左边);
剩下的元素重复上述步骤,直到整个数组有序。
该算法时间复杂度一般为n2 。
java实现代码如下:
public class BubbleSort { public static void swap(int[] array, int a, int b) { array[a] = array[a] ^ array[b]; array[b] = array[b] ^ array[a]; array[a] = array[a] ^ array[b]; } public static void sort1(int[] array, int length) { for(int i = 0; i < length -1; i++) { for (int j = 0; j < length - 1 - i; j++) { if (array[j] > array[j +1]) swap(array, j, j+1); } } } }
该算法有一种改进算法,叫鸡尾酒排序,也叫定向冒泡排序。
我们可以同时遍历出最大和最小的数,并放在两边,后面继续重复上述步骤,某些情况下(比如数据大部分有序),会比第一种时间复杂度低。
JAVA实现如下:
public class BubbleSort { public static void swap(int[] array, int a, int b) { array[a] = array[a] ^ array[b]; array[b] = array[b] ^ array[a]; array[a] = array[a] ^ array[b]; } public static void sort2(int[] array, int length) { int start = 0; int end = length -1 ; while(start < end) { for(int i = start; i < end; i++) { if (array[i] > array[i +1]) swap(array, i, i+1); } end --;for(int j = end; j > start; j--) { if (array[j] < array[j - 1]) swap(array, j, j-1); } start++; } } }
时间: 2024-10-13 23:23:25