Halaman untuk editor yang keluar mempelajari lebih lanjut Dalam ilmu komputer, algoritme pengurutan adalah algoritme yang menempatkan elemen daftar ke dalam urutan. Urutan yang paling sering digunakan adalah urutan numerik dan urutan leksikografis, baik naik maupun turun. Penyortiran yang efisien penting untuk mengoptimalkan efisiensi algoritme lain (seperti algoritme pencarian dan penggabungan) yang memerlukan input data untuk berada dalam daftar yang diurutkan. Penyortiran juga sering berguna untuk mengkanonikalisasi data dan untuk memproduksi
jadi itu bisa jadi salah satu yang tidak stabil, atau bahkan custom dari Zend…
Saya bahkan tidak yakin apakah ini quicksort… karena quicsort mengambil elemen pivot, lalu membuat dua daftar lebih besar dan lebih kecil, lalu menerapkan penyortiran lagi ke 2 daftar tersebut…
- PaulD
Posting Aneh Postingan. 1.061
Utas. 42
Bergabung. Maret 2015
Reputasi. 73
Halo semua,
Saya memiliki fungsi di salah satu model saya yang berfungsi persis seperti yang saya inginkan, saya hanya tidak begitu mengerti cara kerjanya
Saya telah membaca php. net di usort tetapi saya masih bingung karenanya. http. //php. net/manual/en/fungsi. usort. php
Bagaimana fungsi perbandingan membantu menyortir seluruh kumpulan data mengingat bahwa itu hanya menghitung perbedaan antara dua indeks, $a dan $b yang misterius?
Kode
usort($search_results,function($a, $b) {
return $a['search_rank'] - $b['search_rank'];
});
$search_results saya adalah larik yang dibuat dari mencari banyak tabel berbeda dan memformat serta menggabungkan hasilnya (tabel perusahaan, tabel orang, tabel proyek, dll.). Satu-satunya hal yang saya tambahkan adalah apa yang saya sebut peringkat_pencarian yang sebenarnya hanyalah hitungan karakter sebelum string pencarian pertama kali ditemukan, menggunakan stripos(), jadi pencarian untuk 'Mark' memberikan skor 0 untuk orang bernama '
Saya kemudian mengurutkan baris ini berdasarkan search_rank ini di array search_results dengan usort di atas. (Ini adalah upaya saya untuk menambahkan relevansi pencarian ke daftar)
Tapi bagaimana cara kerjanya?
Usort menggunakan fungsi callback $a[]-$b[], tapi bagaimana itu membantu usort mengurutkan seluruh kumpulan data? . Jika ada yang bisa memberi penjelasan tambahan tentang bagaimana usort menggunakan callback itu untuk mengurutkan array saya, saya akan sangat tertarik untuk mendengarnya
Terima kasih sebelumnya atas masukan atau umpan balik,
Semoga sukses,
Paulus
- slax0r
/dev/null Postingan. 57
Utas. 1
Bergabung. Nov 2014
Reputasi. 6
(Pos ini terakhir diubah. 28-09-2015, 12. 22 pagi oleh slax0r. )
Hai,
ini cukup sederhana, bukan?
Mengutip. Fungsi perbandingan harus mengembalikan bilangan bulat kurang dari, sama dengan, atau lebih besar dari nol jika argumen pertama dianggap masing-masing kurang dari, sama dengan, atau lebih besar dari yang kedua
Jadi, jika operasi matematika Anda menghasilkan hasil yang kurang/sama/lebih besar dari nol, larik Anda akan diurutkan sesuai dengan itu. Jika saya mengambil
contoh Anda, Anda memiliki "search_rank" dari 0 dan 3, dan jika kedua hasil dalam array Anda dalam urutan itu berarti akan mengembalikan -2 pada iterasi pertama, menukar kedua elemen tersebut. Yang dapat menyebabkan hasil yang tidak dapat diprediksi. Jika Anda ingin mengurutkan berdasarkan peringkat itu, Anda harus membandingkan nilainya, bukan menguranginya, seperti pada
Kode PHP
if ($a["search_rank"] === $b["search_rank"]) { return 0; }
return $a["search_rank"] < $b["search_rank"] ? -1 : 1;
_
Dengan cara ini array Anda akan diurutkan berdasarkan peringkat, dari yang memiliki nilai terendah hingga yang tertinggi, jika Anda menginginkan sebaliknya, cukup tukar "-1" dan "1" di baris kedua kode di atas
Salam
Situs web. http. //tomaz. lovrec. eu
GitHub. https. //github. com/slax0rr
Twitter. https. //Indonesia. com/slax0rr
- Narf
Saya Postingan. 1.589
Utas. 1
Bergabung. Okt 2014
Reputasi. 121
Istilah "bobot" sering digunakan untuk mendeskripsikan nilai serupa dalam algoritme pengurutan, jadi saya akan menggunakannya di sini juga
-1 berarti $a memiliki bobot lebih rendah dari $b
0 berarti $a dan $b sama
1 berarti $a memiliki bobot lebih tinggi dari $b
Nilai bobot yang lebih tinggi dipindahkan di depan nilai bobot yang lebih rendah dalam daftar, dan karena pada akhirnya Anda akan memiliki semua item daftar dibandingkan satu sama lain, Anda berakhir dengan daftar yang diurutkan.
- PaulD
Posting Aneh Postingan. 1.061
Utas. 42
Bergabung. Maret 2015
Reputasi. 73
Terima kasih atas penjelasannya, sangat membantu
Jadi, apakah usort mengulang berulang kali sampai seluruh daftar tetap tidak berubah?
Jika itu terdengar seperti itu mungkin menyebabkan beberapa overhead meskipun sejauh ini saya tidak dapat mendeteksi penundaan yang nyata sehingga harus sangat cepat dalam hal itu
Sekali lagi terima kasih atas jawaban di atas, saya sangat menghargai penjelasannya
Semoga sukses,
Paulus
- slax0r
/dev/null Postingan. 57
Utas. 1
Bergabung. Nov 2014
Reputasi. 6
usort pada dasarnya adalah algoritma 'merge sort' dengan jaminan kompleksitas O(n log n), di mana n adalah jumlah elemen dari sebuah array. Cara kerjanya adalah membagi array menjadi unit terkecil, jadi, 1 elemen array. Kemudian membandingkan setiap elemen dengan daftar yang berdekatan, dan menggabungkan nilainya. Ini lebih cepat daripada pengurutan gelembung pada daftar besar yang tidak disortir, tetapi jika daftar sudah diurutkan, pengurutan gelembung akan lebih cepat daripada pengurutan gabungan
Ini adalah representasi grafis yang bagus tentang cara kerjanya, diambil dari wiki. https. //mengunggah. wikimedia. org/wikipedia/c. -300px. gif
Situs web. http. //tomaz. lovrec. eu
GitHub. https. //github. com/slax0rr
Twitter. https. //Indonesia. com/slax0rr
- PaulD
Posting Aneh Postingan. 1.061
Utas. 42
Bergabung. Maret 2015
Reputasi. 73
Aha. Akhirnya saya mengerti. Itu tautan yang bagus, terima kasih
Dokumen lain yang lebih teknis yang saya baca tentangnya sekarang juga lebih masuk akal
Sungguh fungsi kecil yang luar biasa pintar. Saya akan sering menggunakan ini di masa mendatang
Terima kasih sekali lagi
Semoga sukses,
Paulus
- slax0r
/dev/null Postingan. 57
Utas. 1
Bergabung. Nov 2014
Reputasi. 6
Yah, usort hanya berguna ketika Anda tidak peduli dengan asosiasi kunci, dan Anda memerlukan logika (ish) khusus yang kompleks untuk diurutkan, seperti dalam contoh Anda, di mana Anda menyortir berdasarkan kunci tertentu. Jika Anda hanya memiliki larik [3,5,6,4,2,1,9,8] normal, maka "asort" mungkin sudah cukup. Perhatikan semua opsi yang tersedia. http. //php. net/manual/en/array. penyortiran. php
Situs web. http. //tomaz. lovrec. eu
GitHub. https. //github. com/slax0rr
Twitter. https. //Indonesia. com/slax0rr
- PaulD
Posting Aneh Postingan. 1.061
Utas. 42
Bergabung. Maret 2015
Reputasi. 73
Saya menemukan usort di daftar itu. -)
Saya belum pernah menggunakannya sebelumnya dan itu berhasil secara ajaib. Niat saya adalah membuat fungsi pembobotan lebih kompleks dari waktu ke waktu, tetapi strpos dari string pencarian sudah cukup untuk saat ini
Saat ini saya sedang mencari proyek, kasus, perusahaan, tugas, pelacak, orang, panduan, dan tabel panggilan, menggabungkan hasilnya ke dalam larik hasil pencarian yang memiliki nama, tautan, ikon, deskripsi, dan indeks bobot untuk setiap sub larik yang dibangun dari berbagai bit
Saat ini saya hanya mengambil 10 hasil pertama dari setiap tabel, yang tidak memiliki info yang relevan untuk saat ini, tetapi mengingat kecepatan usort saya bereksperimen dengan mengambil 100 hasil pertama dan kemudian semua hasil dari setiap tabel, menyortirnya, dan . Namun saya curiga ini akan menjadi terlalu lambat tetapi saat ini fungsinya sangat cepat sehingga kinerjanya tampaknya tidak terpengaruh
Namun, seperti yang saya katakan, itulah yang saya lakukan sekarang. Saya merasa jauh lebih baik sekarang, saya benar-benar memiliki pemahaman tentang bagaimana sebenarnya usort bekerja
Rupanya akar dari metode penyortiran ini ditemukan pada tahun 60-an. Begitu banyak orang pintar, itu selalu membuat saya takjub
Semoga sukses,
Paulus
- ignitedcms
Pengembang CMS yang dinyalakan Postingan. 505
Utas. 72
Bergabung. Juli 2015
Reputasi. 16
Jelas memilah ini langsung dari database akan menghasilkan hasil yang paling optimal
Memang terkadang kueri SQL bisa menjadi terlalu rumit dan terkadang Anda harus menggunakan php untuk melakukan pengurutan khusus, tetapi lebih sering penyortiran SQL adalah cara yang harus dilakukan
Panduan praktis untuk IgnitedCMS - Buku segera hadir, www. ignitedcms. com
- PaulD
Posting Aneh Postingan. 1.061
Utas. 42
Bergabung. Maret 2015
Reputasi. 73
(Pos ini terakhir diubah. 11-09-2015, 08. 29 pagi oleh PaulD. Sunting Alasan. salah ketik kecil )
Hanya ingin menambahkan bahwa saya mendapati diri saya hari ini lagi menggaruk-garuk kepala pada proyek yang berbeda berpikir 'bagaimana saya akan mengurutkan array (sangat rumit) itu' ketika saya ingat usort dan melakukannya dalam dua baris kode yang sangat singkat
Saya sangat menyukai usort
Hanya berpikir saya akan membagikannya
-)