text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
*
* @author qq:542335496@qq.com
* 优化冒泡排序
*
*/
public class BubbleSort {
public static int[] sort(int[] data) {
int temp;
boolean flag = false;
for (int i = 0; i < data.length - 1; i++) {
flag = true;
for (int j = 0; j < data.length - i - 1; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
return data;
}
public static void show(int[] data) {
for (int q = 0; q < data.length; q++) {
System.out.print(data[q] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] a = { 4, 2, 3, 6, 5 ,56,23,41};
show(a);
sort(a);
show(a);
}
}
text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
*
* @author qq:542335496@qq.com
* 优化冒泡排序 附上解释
* 一次优化。我们可以想到这种极端情况:array本身就是排序好的,但是依照如上算法,我们仍然要遍历n平方/2次。原因在于,我们没有机制检查数组是否是排序好的。
* 解决办法就是加入标识项,如果发现一次内层循环没有经过任何交换,则说明array已经排序完毕。
*/
public class BubbleSort {
public static int[] sort(int[] data) {
int temp;
boolean flag = false;
for (int i = 0; i < data.length - 1; i++) {
flag = true;
for (int j = 0; j < data.length - i - 1; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
flag = false;
}
}
//如果上一轮冒泡排序已经全部有序 即flag!=false,则直接退出,不用进行下一轮冒泡循环,提高效率,否则数组已经有序了,他还会继续冒泡循环
if (flag) {
break; //可以注释这一行,单步测试或者查看i的值即可验证
}
System.out.println(i);
}
return data;
}
public static void show(int[] data) {
for (int q = 0; q < data.length; q++) {
System.out.print(data[q] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] a = { 4, 2, 3, 6, 5 ,56,23,41};
show(a);
sort(a);
show(a);
}
}





评论
登录后即可评论
分享你的想法,与作者互动
暂无评论