Mungkin di suatu titik di program anda; anda harus berurusan dengan
array dan harus men-Sort-nya
Sedangkan kita tahu bahwa pekerjaan sorting itu cukup "mahhalll"
Padahal : bisa saja array yg harus disort tsb SUDAH sorted
Maka itu sebelum array disort, apa ndak lebih baik kita test dulu,
jika belum sorted ya segera di sort (walaupun mahall), tetapi
jika SUDAH sorted, tidak perlu disort lagi.
Dgn demikian kita sudah mempersingkat pekerjaan
Memang, di dalam test itu pun ada loop, tetapi hanya mengandung
N-1 langkah (sebanyak data yang ada) -1, sedangkan di bubble sort
(yg baik) loopnya berisi N/2 * (N-1) langkah
Mengetahui suatu deretan data apakah terurut atau tidak, bukan hal yg
sulit dibayangkan.
Mula-mula data(1) ditest, dibandingkan vs data(2), untuk diketahui eskalasinya.
Ada tiga kemungkinan hasil:
SAMA, LEBIH BESAR (menurun) , LEBIH KECIL (menaik).
Status eskalasi itu kita ingat dlm sebuah variable.
Kemudian secara berturut turut (dengan loop)
data(2) vs data(3) ...data(n) vs data(n+1).
Di setiap step, jika eskalasi-nya konsisten, loop diteruskan; jika sampai pada
data terakhir nilai eskalasi tetap konsisten, berarti deret = sudah sorted.
tetapi jika di satu step nilai eskalasi tidak konsisten, loop dihentikan dan
dapat segera dinilai bahwa deret data itu Belum sorted.
Itu kalau data berupa Bilangan.
Data String (Text) tidak jauh berbeda, penanganannya memang tidak persis sama.
Dengan algoritma seperti itu kita dapat membuat fungsi sendiri, yang dapat
mengetahui apakah data dalam suatu range sudah sorted atau belum sorted.
Contoh code dan penggunaannya ada di lampiran,
mudah-mudahan ada manfaatnya..
-siti-
'------------
Function IsNArraySorted(
'----- siti Vi // 22 Agu 2009 --------
' IsNumericArraySorte
' men-test array berisi data numeric
' apakah Sorted atau UnSorted
'------------
Dim Eskal As Long ' eskalasi selisih tiap elemen
Dim N As Long
Arr = Range2Array(
' jika bukan array..
If Not IsArray(Arr) Then GoTo ArrNotSorted
' jika elemen-array-
If UBound(Arr) = 1 Then GoTo ArrSorted
If Arr(1) < Arr(2) Then Eskal = 1
If Arr(1) = Arr(2) Then Eskal = 0
If Arr(1) > Arr(2) Then Eskal = -1
For N = 1 To UBound(Arr) - 1
If Arr(N) < Arr(N + 1) Then
If Eskal = 0 Then Eskal = 1
If Eskal = -1 Then GoTo ArrNotSorted
ElseIf Arr(N) > Arr(N + 1) Then
If Eskal = 0 Then Eskal = -1
If Eskal = 1 Then GoTo ArrNotSorted
End If
Next N
ArrSorted:
IsNArraySorted = True
Exit Function
ArrNotSorted:
IsNArraySorted = False
End Function
'------------
| Selamat menjalankan ibadah puasa... |
| http://www.facebook.com/group.php?gid=37671048001&ref=mf |
+-------------------------------------------------------------------+
| DILARANG : MLM, money game, OOT, iklan tanpa izin, SARA, testing, |
| pembicaraan pribadi, one line message, melecehkan, tidak sopan. |
+-------------------------------------------------------------------+
| Buat subjek yang kreatif, jangan : "tanya", "help", "mohon bantu" |
| Usahakan besar attachment < 200 kb. Gunakan winzip jika perlu. |
+-------------------------------------------------------------------+
| Ajak teman-teman Anda bergabung dengan mengirim e-mail kosong ke |
| XL-mania-subscribe@yahoogroups.com atau kirimkan mereka file dari |
| http://groups.yahoo.com/group/XL-mania/files/Promotion/ |
+-------------------------------------------------------------------+
| Berikan testimoni di : http://www.friendster.com/xlmania atau... |
| http://www.xl-mania.com/2008/06/testimoni-xl-mania.html |
+-------------------------------------------------------------------+
| Message lama ada di : |
| http://groups.yahoo.com/group/XL-mania/messages [perlu yahoo id] |
| http://www.mail-archive.com/xl-mania@yahoogroups.com |
+-------------------------------------------------------------------+
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch format to Traditional
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe
Nenhum comentário:
Postar um comentário