-
Notifications
You must be signed in to change notification settings - Fork 44
/
Quick_Luoyaoguang_3D.java
100 lines (95 loc) · 2.25 KB
/
Quick_Luoyaoguang_3D.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
95
96
97
98
99
100
package sortProcessor;
import timeProcessor.TimeCheck;
//第三代罗瑶光小高峰平均高峰过滤快排思想设计中。小高峰高峰过滤快速排序
//同频函数减少
//同频算子减少
//同频变量减少
public class Quick_Luoyaoguang_3D{
public int[] sort(int[] a) {
TimeCheck imeCheck= new TimeCheck();
imeCheck.begin();
quick2ds(a, 0, a.length- 1);
imeCheck.end();
imeCheck.duration();
return a;
}
private void quick2ds(int[] a, int lp, int rp) {
if(lp< rp){
int c= rp- lp; if(c< 7){ int j;
for(int i= 1+ lp; i<= lp + c; i++){
j= i;while(j>= 1+ lp){
if(a[j]< a[j- 1]){
int temp= a[j]; a[j]= a[j- 1]; a[j- 1]= temp;
}
j--;
}
}
return;
}
int pos = partition(a, lp, rp);
quick2ds(a, lp, pos-1);
quick2ds(a, pos+1, rp);
}
}
private int partition(int[] a, int lp, int rp) {
int x= a[lp]>= a[rp]? a[lp]: a[rp];
int lp1= lp;
while(lp1< rp){//我总觉得这里可以进行一种积分算法优化,我一直在思考,别让那么快想到。
while(a[lp1]<= x&& lp1< rp) {
lp1++;
}
while(a[rp]> x){
rp--;
}
if(lp1< rp){
int temp= a[rp]; a[rp]= a[lp1]; a[lp1]= temp;
}
}
a[lp]= a[rp]; a[rp]= x;
return rp;
}
public String[][] sort(String[][] a) {
quick2dsString(a, 0, a.length-1);
return a;
}
private void quick2dsString(String[][] a, int lp, int rp) {
if(lp< rp){
int c= rp- lp; if(c< 7){ int j;
for(int i= 1 + lp; i<= lp+ c; i++){
j= i; while(j>= 1+ lp){
if(Double.valueOf(a[j][1])<Double.valueOf(a[j- 1][1])){
String []temp= a[j];
a[j]= a[j- 1];
a[j-1]= temp;
}
j--;
}
}
return;
}
int pos= partitionString(a, lp, rp);
quick2dsString(a, lp, pos- 1);
quick2dsString(a, pos+ 1, rp);
}
}
private int partitionString(String[][] a, int lp, int rp) {
String[] x= a[lp]; int rp1= rp; int lp1= lp;
if(Double.valueOf(x[1])>= Double.valueOf(a[rp][1])){
x= a[rp];
}
while(lp1<rp1){
while((Double.valueOf(a[lp1][1])<=Double.valueOf(x[1]))&&(lp1<rp1)){
lp1++;
}
while(Double.valueOf(a[rp1][1])>Double.valueOf(x[1])){
rp1--;
}
if(lp1<rp1){
String[] temp=a[rp1];
a[rp1]=a[lp1];a[lp1]=temp;
}
}
a[lp]=a[rp1];a[rp1]=x;
return rp1;
}
}