Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang algoritma isihan pantas Javascript_Pengetahuan asas

Penjelasan terperinci tentang algoritma isihan pantas Javascript_Pengetahuan asas

WBOY
Lepaskan: 2016-05-16 16:29:14
asal
1420 orang telah melayarinya

Isih cepat ialah penambahbaikan pada isihan gelembung. Bahagikan data untuk diisih kepada dua bahagian bebas melalui pengisihan satu laluan Semua data dalam satu bahagian adalah lebih kecil daripada semua data di bahagian lain Kemudian gunakan kaedah ini untuk mengisih kedua-dua bahagian data masing-masing proses pengisihan boleh Teruskan secara rekursif, dan akhirnya keseluruhan data menjadi urutan tertib.

Anggapkan tatasusunan yang hendak diisih ialah A[0]...A[N-1]. Mula-mula, pilih data secara rawak (biasanya nombor pertama tatasusunan) sebagai data penanda aras, dan kemudian semua nombor lebih kecil. daripada itu Letakkannya di hadapannya, dan semua nombor yang lebih besar daripadanya diletakkan di belakangnya. Proses ini dipanggil satu laluan pantas. Perlu diingat bahawa isihan cepat bukanlah algoritma pengisihan yang stabil, iaitu, kedudukan relatif berbilang nilai yang sama mungkin berubah pada akhir algoritma.
Algoritma isihan pantas satu laluan ialah:
1) Tetapkan dua pembolehubah rendah dan tinggi Apabila pengisihan bermula: rendah=0, tinggi=N-1; 2) Gunakan elemen tatasusunan pertama sebagai data rujukan dan tetapkan ia kepada asas, iaitu, base=A[0]
3) Cari ke hadapan dari tinggi, iaitu, cari ke hadapan dari belakang (tinggi--), cari nilai pertama A[tinggi] yang kurang daripada asas, dan tukar A[tinggi] dan A[rendah]; 4) Cari ke belakang dari rendah, iaitu, cari dari depan ke belakang (rendah), cari A[rendah] pertama yang lebih besar daripada asas, dan tukar A[rendah] dan A[tinggi]; 5) Ulang langkah 3 dan 4 sehingga rendah=tinggi;


Salin kod

Kod adalah seperti berikut: sekatan fungsi(elemen, rendah, tinggi){ //Secara lalai, elemen pertama di sebelah kiri digunakan sebagai elemen asas
var base=elemen[rendah];
manakala(rendah < tinggi){
//Cari dari belakang ke hadapan sehingga elemen yang lebih kecil daripada elemen asas ditemui dan tukarkannya
Manakala(rendah < tinggi && unsur[tinggi] >= asas) tinggi--;
var swap1=elemen[rendah];elemen[rendah]=elemen[tinggi];elemen[tinggi]=swap1;
//Cari dari hadapan ke belakang sehingga elemen yang lebih besar daripada elemen asas ditemui dan tukarkannya
manakala(rendah < tinggi && unsur[rendah] <= asas) rendah ;
var swap2=elemen[rendah];elemen[rendah]=elemen[tinggi];elemen[tinggi]=swap2;
}
//Kembalikan kedudukan elemen rujukan sebagai kedudukan pecahan jujukan
Kembali rendah;
}
isihan fungsi(elemen, rendah, tinggi){
jika(rendah // Bahagikan urutan kepada dua dan bahagikannya ke dalam urutan sebelum dan selepas kedudukan pecahan urutan pertama mempunyai nilai yang lebih kecil daripada kedudukan pecahan, dan urutan kedua mempunyai nilai yang lebih besar daripada kedudukan pecahan
. var partitionPos=partition(elemen, rendah, tinggi);
//Teruskan mengisih urutan sebelumnya
secara rekursif Isih(elemen, 0, partitionPos-1);
//Teruskan mengisih urutan seterusnya
secara rekursif Isih(elemen, partitionPos 1, tinggi);
}
}
elemen var = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
console.log('sebelum: ' elemen);
sort(elemen, 0, elemen.length-1);
console.log(' selepas: ' elemen);



Kecekapan:
Kerumitan masa: Terbaik: O(nlog2n), Paling teruk: O(n^2), Purata: O(nlog2n).

Kerumitan ruang: O(nlog2n).

Kestabilan: Tidak stabil.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan