所以我們在課堂上學習了冒泡排序,我有這個代碼
!Sorting n real numbers
program bubblesort
implicit none
integer::i,j,n
integer,allocatable,dimension(:)::A
write(*,*)"Enter the number of elements"
read(*,*)n
allocate (A(n))
write(*,*)"Enter the numbers"
read(*,*)(A(i),i=1,n)
do while (n>1)
do i=1,n-1
if(A(i) > A(i 1)) then
j = A(i)
A(i) = A(i 1)
A(i 1) = j
endif
enddo
n = n-1
enddo
write(*,*)"The sorted array is - ",A
end program
現在我的教授要求我修改它,如果要排序的給定陣列的一部分已經在正確的位置,那么我們應該跳過那部分,例如說我的陣列是5 3 1 2 4 6 7 8,這里6 7 8在正確的位置,所以怎么能我們撰寫了一個程式,它會自動跳過這最后 3 個元素。
我在網上到處都看過,但我找不到它如何以這種方式優化冒泡排序,我只能找到方法來檢查整個陣列是否已排序,然后在發生這種情況時如何結束排序。
我在這里先向您的幫助表示感謝!
uj5u.com熱心網友回復:
我能夠使用 2 個不同的子例程來解決這個問題,一個是第一次檢查,它通過陣列并檢查最后有多少元素不需要進一步排序,然后我使用另一個子例程進行其余的冒泡排序運行
!This is the first run of bubble sort to know the range
subroutine Bubtest(n,A,k)
implicit none
integer::i,j,k,n,A(8)
do i=1,n-1
if(A(i) > A(i 1)) then
j = A(i)
A(i) = A(i 1)
A(i 1) = j
k = i
endif
enddo
k = k 1
end subroutine
這是確定 k 的第一個子程式,它找到縮小的范圍
!This is the main bubble sort subroutine
subroutine sortBub(k, A)
implicit none
integer::i,j,k,A(8)
do while (k>1)
do i=1,k-1
if(A(i) > A(i 1)) then
j = A(i)
A(i) = A(i 1)
A(i 1) = j
endif
enddo
k = k-1
enddo
end subroutine
這適用于使用陣列中縮小范圍的常規冒泡排序
在我的主程式中,我只是連續呼叫這兩個
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482234.html
