Köp açyk Java taslamalarynyň deslapky koduny seljerip, döredijileriň köpüsiniň tertipleşdirmegi diňe iki dürli usulda amala aşyrýandygyny gördüm.
sort()
Olaryň biri synp usulynyň ulanylmagyna Collections
ýa Arrays
-da beýlekisi TreeMap
we TreeSet
.
Sort () usulyny ulanmak
Kolleksiýany tertiplemek zerur bolsa, ulanyňCollections.sort()
.
// Collections.sort(…)
List<ObjectName> list = new ArrayList<ObjectName>();
Collections.sort(list, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
Bir massiw tertiplemek zerur bolsa, ulanyň Arrays.sort()
.
// Arrays.sort(…)
ObjectName[] arr = new ObjectName[10];
Arrays.sort(arr, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sort()
Collectionygyndy ýa-da massiw eýýäm bahalar bilen doldurylanda bu usul örän amatlydyr.
Öz-özüňi tertipleşdirýän maglumat gurluşlaryny ulanmak
List
Sanawy ( ) tertiplemek ýa-da ( Set
) düzmek zerur bolsa , TreeSet
sortlaşdyryş gurluşyny ulanyň.
// TreeSet
Set<ObjectName> sortedSet = new TreeSet<ObjectName>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedSet.addAll(unsortedSet);
Map
Sözlük ( ) tertiplemek zerur bolsa , TreeMap
sortlaşdyryş gurluşyny ulanyň. TreeMap
düwmesi boýunça tertiplenýär key
.
// TreeMap – использующий String ключи и компаратор (Comparator) CASE_INSENSITIVE_ORDER,
// упорядочивающий строки (String) методом compareToIgnoreCase
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap – общий случай, компаратор указывается вручную
Map<ObjectName, String> sortedMap = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedMap.putAll(unsortedMap);
Collectionygyndydaky elementler üçin köp sanly gözleg geçirmeli bolýan ýagdaýlarda ýokardaky çemeleşme örän peýdalydyr. O(log(n))
Öz-özüňi tertipleşdirýän maglumat gurluşlaryndan has gowy netijelilik bar O(n)
. Bu, ýygyndydaky maglumatlaryň mukdary iki esse artanda gözleg wagtynyň iki esse köpelmeýändigini, ýöne hemişelik mukdarda köpelýändigini aňladýar .
Meseläni tertiplemek üçin erbet çemeleşme
Programmistleriň sortlaşdyryş algoritmlerini özbaşdak beýan edýän mysallaryny tapyp bilersiňiz. Aşakda görkezilen sortlaşdyryş koduny gözden geçiriň (ýokarlanýan tertipde goşa massiw tertiplemek ). Bu kod diňe bir netijesiz bolman, eýsem okalmaýan hem. Şeýle mysallar köp.double t;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
if (r[j] < r[i]) {
t = r[i];
r[i] = r[j];
r[j] = t;
}
GO TO FULL VERSION