public class Test { public static void main(String[] args) { int[] data = getData(); //排序开始 int t; for (int i = 0; i < data.length - 1; i++) { for (int j = 0; j < data.length - 1 - i; j++) { if (data[j] > data[j + 1]) { t = data[j]; data[j] = data[j + 1]; data[j + 1] = t; } } } //排序结束 check(data); } private static int[] getData() { int length = 10; int max = 100; Random random = new Random(); int[] data = new int[length]; for (int i = 0; i < length; i++) { data[i] = random.nextInt(max); } print(data); return data; } private static void check(int[] data) { print(data); int asc = 0; int desc = 0; for (int i = 0; i < data.length - 1; i++) { if (data[i] < data[i + 1]) { asc++; } else if (data[i] > data[i + 1]) { desc++; } else { asc++; desc++; } } if (asc == data.length - 1 && desc != data.length - 1) { System.out.println("升序"); } else if (asc != data.length - 1 && desc == data.length - 1) { System.out.println("降序"); } else { System.out.println("检测不通过"); } } private static void print(int[] data) { for (int i = 0; i < data.length; i++) { System.out.print(data[i] + " "); } System.out.println(); } }
原理:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
最终效果就好像汽水中的气泡一样,底下是小的,漂浮到顶部的过程慢慢变大,故称为:冒泡排序。