File: SortTools_ShellSort.gxx

package info (click to toggle)
opencascade 6.2-7
  • links: PTS
  • area: non-free
  • in suites: lenny
  • size: 444,652 kB
  • ctags: 256,750
  • sloc: cpp: 1,150,123; ansic: 225,762; tcl: 30,130; makefile: 12,619; sh: 7,958; xml: 3,981; lisp: 283; java: 212; csh: 203; perl: 15
file content (40 lines) | stat: -rw-r--r-- 884 bytes parent folder | download | duplicates (5)
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
// SortTools_ShellSort.gxx
// cree le 04/11/91 par ASI
// Reference : Software Conponents with ADA, Grady Booch.

void SortTools_ShellSort::Sort(Array& TheArray, 
				      const Comparator& Comp) 
{

  Item    TempItem;
  Standard_Integer Outer;
  Standard_Integer Inner;
  Standard_Integer Inc = 1;

  for(;;) {
    if((9 * Inc) + 4 >= TheArray.Upper() - TheArray.Lower() + 1) break;
    Inc = (Inc * 3) + 1;
  }
  for(;;) {
    Outer = TheArray.Lower() + Inc;
    for(;;) {
      TempItem = TheArray(Outer);
      Inner = Outer;
      while (Comp.IsLower(TempItem, TheArray(Inner - Inc))) {
	TheArray(Inner) = TheArray(Inner - Inc);
	Inner = Inner - Inc;
	if(Inner - Inc < TheArray.Lower()) break;
      }
      TheArray(Inner) = TempItem;
      if(Outer + Inc > TheArray.Upper()) break;
      Outer = Outer + Inc;
    }
    if(Inc == 1) break;
    Inc = (Inc - 1) / 3;
  }
}