文章将会同步到个人微信公众号:Android部落格
1.1 概述
排序使用了两层循环,第一层从0到数组大小;第二层从0开始,依次比较index后一个和前一个的大小,只要后面的元素比前面元素大,就把它们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,直到排序完成。
1.2 描述
-
比较相邻的元素。如果第一个比第二个大,就交换它们两个;
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
-
针对所有的元素重复以上的步骤,除了最后一个;
-
重复步骤1~3,直到排序完成。
1.3 代码
属于比较排序,时间复杂度为n的平方。
代码如下:
public class BubbleSort {
// private static int[] number = {5, 8, 3, 6, 9, 10, 34, 1, 7, 12, 65, 4, 23, 2, 16, 15, 76, 56, 8};
private static int[] number = {5, 8, 3, 6, 9, 10, 34, 1, 7, 6};
private static String TAG = "BubbleSort";
public static void bubbleSort() {
int size = number.length;
int compareCount = 1;
Log.d(TAG, "sorted compare index 0 is " + Arrays.toString(number));
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (number[j + 1] < number[j]) {
int temp = number[j + 1];
number[j + 1] = number[j];
number[j] = temp;
Log.d(TAG, "sorted compare index " + (compareCount++) + " is " + Arrays.toString(number));
}
}
}
for (int temp : number) {
Log.d(TAG, "sorted number is:" + temp);
}
}
}
1.4 总结
时间复杂度为n的平方,空间复杂度为1。
稳定排序。
示意图如下:
冒泡排序.jpg
网友评论