Tecnologia, programação e muito Visual FoxPro.

segunda-feira, 24 de agosto de 2009

]] XL-mania [[ Bgmana mengetahui bahwa data dlm range sudah Sorted?

 

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(Arr) As Boolean
'----- siti Vi // 22 Agu 2009 --------
' IsNumericArraySorted
' men-test array berisi data numeric
' apakah Sorted atau UnSorted
'-------------------------------------
Dim Eskal As Long   ' eskalasi selisih tiap elemen
Dim N As Long

Arr = Range2Array(Arr)
' jika bukan array..
If Not IsArray(Arr) Then GoTo ArrNotSorted

' jika elemen-array-nya hanya 1
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
'-----------------------

__._,_.___
+-:: XL-mania ::::::::::::::::::::----------------------------------+
| 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              |
+-------------------------------------------------------------------+
Recent Activity
Visit Your Group
Give Back

Yahoo! for Good

Get inspired

by a good cause.

Y! Toolbar

Get it Free!

easy 1-click access

to your groups.

Yahoo! Groups

Start a group

in 3 easy steps.

Connect with others.

.

__,_._,___

Nenhum comentário:

Arquivo do blog