-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBubbleSort.java
94 lines (87 loc) · 2.17 KB
/
BubbleSort.java
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package java_sort;
import static java_sort.CommonConstants.LENGTH;
import static java_sort.CommonConstants.RANGE;
import java.util.Arrays;
import java.util.Random;
/**
* 冒泡排序
* 时间复杂度O(n2),空间复杂度O(1)
*
* @author 唐龙
*/
public class BubbleSort {
public static void main(String[] args) {
int [] intArr = new int [LENGTH];
//冒泡排序1
//数据初始化
Random rd = new Random();
for(int i=0;i<LENGTH;i++){
intArr[i]=rd.nextInt(RANGE);
}
//排序前
System.out.println("排序前:"+Arrays.toString(intArr));
long begin = System.nanoTime();
//冒泡排序1
bubbleSort1(intArr);
long end = System.nanoTime();
System.out.printf("冒泡排序1共耗时%f纳秒%n",(end-begin)/1.0);
//冒泡排序1排序后后
System.out.println("冒泡排序1后:"+Arrays.toString(intArr));
//冒泡排序2
//数据初始化
for(int i=0;i<LENGTH;i++){
intArr[i]=rd.nextInt(RANGE);
}
//排序前
System.out.println("排序前:"+Arrays.toString(intArr));
begin = System.nanoTime();
//冒泡排序2
bubbleSort2(intArr);
end = System.nanoTime();
System.out.printf("冒泡排序2共耗时%f纳秒%n",(end-begin)/10.0);
//冒泡排序2排序后后
System.out.println("冒泡排序2后:"+Arrays.toString(intArr));
}
//冒泡排序实现方法1
static void bubbleSort1(int [] intArr){
int i,j;
int len=intArr.length;
//进行n-1趟操作
for(i=0;i<len-1;i++){
for(j=len-1;j>i;j--){
//升序
if(intArr[j]<intArr[j-1]){
swap(intArr,j,j-1);//交换
}
}
//显示每趟操作的结果
System.out.printf("第%2d趟操作:%s%n",i+1,Arrays.toString(intArr));
}
}
//冒泡排序实现方法2,在实现方法1的基础加上有序判断
static void bubbleSort2(int [] intArr){
int i,j;
int len=intArr.length;
boolean stop = false;//如果已经有序则停止操作
//进行n-1趟操作
for(i=0;i<len-1&&!stop;i++){
stop=true;
for(j=0;j<len-i-1;j++){
//升序
if(intArr[j]>intArr[j+1]){
swap(intArr,j,j+1);//交换
stop=false;
}
}
//显示每趟操作的结果
System.out.printf("第%2d趟操作:%s%n",i+1,Arrays.toString(intArr));
}
}
// 交换方法
static void swap(int[] arr,int i,int j){
int tmp;
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}