-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHelanFlag.java
More file actions
93 lines (71 loc) · 1.62 KB
/
HelanFlag.java
File metadata and controls
93 lines (71 loc) · 1.62 KB
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
//荷兰国旗问题
//在一个数组arr中,给定一个X,要求:
//1、小于X的放数组左边
//2、等于X的放中间
//3、大于X的放右边
//
//是快速排序的基础,和思路
//
public class HelanFlag{
public int[] process(int[] arr,int L,int R){
if(L > R) return new int[]{-1,-1};
if(L == R) return new int[]{L,R};
int less = L-1;
int more = R;
int index = L;
int random = L + (int)(Math.random()*(R-L+1));
//System.out.println("random = "+arr[random]);
swap(arr,random,R);
while(index<more){
if(arr[index] == arr[R]){
index++;
}
else if(arr[index]<arr[R]){
swap(arr,index++,++less);
}
else{
swap(arr,index,--more);
}
}
swap(arr,more,R);
return new int[]{less+1,more};
}
public void swap(int[] arr,int l,int r){
int t = arr[l];
arr[l] = arr[r];
arr[r] = t;
}
public static int[] getArr(int length,int max){
int[] arr= new int[length];
for (int i=0; i<length-1; i++) {
arr[i] = (int)(Math.random()*max);
}
return arr;
}
public static Boolean compar(int[] arr,int[] scop){
for (int i=0; i<scop[0];i++ ) {
if(arr[i] >= arr[scop[0]]){
return false;
}
}
for (int i=scop[1]+1; i<arr.length;i++ ) {
if(arr[i] <= arr[scop[1]]){
return false;
}
}
return true;
}
public static Boolean isTrue(){
int max = 999999;
for (int i=0; i<max;i++ ) {
HelanFlag t=new HelanFlag();
int[] arr=getArr(50,9999);
int[] scop = t.process(arr,0,arr.length-1);
if(!compar(arr,scop)) return false;
}
return true;
}
public static void main(String[] args){
System.out.println("isTrue = "+isTrue());
}
}