public static void main(String[] args) {
int len = 20;
int[] a = buildRandomArray(len);
//int[] a = new int[]{1,2,3,4,5,6,7,8,9,10}; // 优化点1的情况
//int[] a = new int[]{4,1,2,5,3,6,7,8,9,10}; // 优化点2的情况
Arrays.stream(a).forEach(v-> System.out.print(v+" "));
int lastSortedIndex = 0;
int sortedBorder = len-1;
for (int i = 0; i < len-1 ; i++) {
boolean isSorted = true;
for (int j = 0; j < sortedBorder; j++) {
if (a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
isSorted = false; // 优化点1:考虑数组已经是有序的,如果遍历一次,发现没有发生交换,那数组就是有序的
lastSortedIndex = j; // 优化点2:考虑部分是是有序的,所以定个边界,防止重复比较
}
}
sortedBorder = lastSortedIndex;
if (isSorted) break;
}
System.out.println();
Arrays.stream(a).forEach(v-> System.out.print(v+" "));
}
public static int[] buildRandomArray(int len){
if (len <= 0){
return new int[]{0};
}
if (len > 20){
len = 20;
}
int max = len * 10 ;
Supplier<Integer> supplier =()->new Random().nextInt(max);
int[] r = new int[len];
for (int i = 0; i < len; i++) {
r[i] = supplier.get();
}
return r;
}
2021-05-29 冒泡排序优化版
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 目录 冒泡排序原理 基础版冒泡排序代码- 无注释版,精简代码- 有注释版,并添加辅助行理解代码 进阶版冒泡排序代码...
- functionsuperBubbleSort(arr){ for(vari=0,count=0;i<arr.le...
- 1.冒泡排序的思路官方概念:通过对待排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐移...
- 在生活中,我们离不开排序,比如我们上学的时候按个头高低排位置,现在我们买东西的时候会按照发货地远近进行排序,或者价...