subroutine swap(a, i, j) integer a(*), i, j, temp temp = a(i) a(i) = a(j) a(j) = temp end subroutine sort (a, n) integer a(n), gap, j, temp logical swapped gap = n do gap = (gap * 10) / 13 if (gap .eq. 9 .or. gap .eq. 10) gap = 11 if (gap .lt. 1) gap = 1 swapped = .false. do i = 1, n - gap j = i + gap if (a(i) .gt. a(j)) then call swap(a, i, j) swapped = .true. end if end do if (gap .eq. 1 .and. .not. swapped) return end do end program combsort integer a(10) data a /1, 6, 5, 3, 8, 9, 7, 2, 4, 0/ call sort(a, 10) write (*, *) a end