diff --git a/sorting/bubblesort.f95 b/sorting/bubblesort.f95 index 73f0a8e..9a10851 100644 --- a/sorting/bubblesort.f95 +++ b/sorting/bubblesort.f95 @@ -1,7 +1,7 @@ program testbubblesort integer lst(10) lst = (/ 10, 9, 8, 4, 5, 6, 7, 3, 2, 1 /) - call bubblesort(lst, 0, 10) + call bubblesort(lst, 1, 10) call show(lst) end program testbubblesort @@ -13,12 +13,12 @@ subroutine bubblesort(lst, a, b) integer y integer tmp do x = a, b-1 - do y = a, b-x-1 + do y = a, b-x if (lst(y) .gt. lst(y+1)) then tmp = lst(y) lst(y) = lst(y+1) lst(y+1) = tmp - endif + end if end do end do end diff --git a/sorting/insertionsort.f95 b/sorting/insertionsort.f95 index c2368b3..67816bf 100644 --- a/sorting/insertionsort.f95 +++ b/sorting/insertionsort.f95 @@ -1,7 +1,7 @@ program testinsertionsort integer lst(10) lst = (/ 10, 9, 8, 4, 5, 6, 7, 3, 2, 1 /) - call insertionsort(lst, 0, 10) + call insertionsort(lst, 1, 10) call show(lst) end program testinsertionsort diff --git a/sorting/selectionsort.f95 b/sorting/selectionsort.f95 new file mode 100644 index 0000000..ae20588 --- /dev/null +++ b/sorting/selectionsort.f95 @@ -0,0 +1,37 @@ +program testselectionsort + integer lst(10) + lst = (/ 10, 9, 8, 4, 5, 6, 7, 3, 2, 1 /) + call selectionsort(lst, 1, 10) + call show(lst) +end program testselectionsort + +subroutine selectionsort(lst, a, b) + integer a + integer b + integer lst(10) + integer i + integer j + integer min_id + integer tmp + do i = a, b-1 + min_id = i + do j = i+1, b + if (lst(min_id) .gt. lst(j)) then + min_id = j + end if + end do + tmp = lst(i) + lst(i) = lst(min_id) + lst(min_id) = tmp + end do +end + +subroutine show(lst) + integer lst(10) + integer x + do x = 1, 10 + print 100, lst(x) + end do + +100 format (i0) +end