GPL license added
[jalview.git] / src / MCview / Zsort.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 \r
20 package MCview;\r
21 \r
22 import java.util.*;\r
23 \r
24 public class Zsort {\r
25 \r
26   public static void Zsort(Vector bonds) {\r
27 \r
28     sort(bonds,0,bonds.size()-1);\r
29   }\r
30 \r
31 \r
32 \r
33   public static void sort(Vector bonds,int p, int r) {\r
34     int q;\r
35 \r
36     if (p < r) {\r
37       q = partition(bonds,p,r);\r
38       sort(bonds,p,q);\r
39       sort(bonds,q+1,r);\r
40     }\r
41   }\r
42 \r
43   private static int partition(Vector bonds, int p, int r) {\r
44     float x = ((Bond)bonds.elementAt(p)).start[2];\r
45     int i = p-1;\r
46     int j = r+1;\r
47 \r
48     while(true) {\r
49       do {\r
50         j = j-1;\r
51       } while (j >= 0  && ((Bond)bonds.elementAt(j)).start[2] > x);\r
52 \r
53       do {\r
54         i = i+1;\r
55       } while (i < bonds.size() && ((Bond)bonds.elementAt(i)).start[2] < x);\r
56 \r
57       if ( i < j) {\r
58         Bond tmp = (Bond)bonds.elementAt(i);\r
59         bonds.setElementAt(bonds.elementAt(j),i);\r
60         bonds.setElementAt(tmp,j);\r
61       } else {\r
62         return j;\r
63       }\r
64     }\r
65   }\r
66 }\r
67 \r
68 \r
69 \r