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