Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang algoritma untuk melaksanakan Quicksort dalam kemahiran Javascript_javascript

Penjelasan terperinci tentang algoritma untuk melaksanakan Quicksort dalam kemahiran Javascript_javascript

WBOY
Lepaskan: 2016-05-16 15:40:43
asal
1079 orang telah melayarinya

Pada masa ini, terdapat kira-kira tujuh atau lapan algoritma pengisihan yang paling biasa, antaranya "Quicksort" adalah yang paling banyak digunakan dan lebih pantas. Ia telah dicadangkan oleh pemenang Anugerah Turing C. A. R. Hoare (1934--) pada tahun 1960.

Idea "isih cepat" sangat mudah Seluruh proses pengisihan hanya memerlukan tiga langkah:

(1) Dalam set data, pilih elemen sebagai "pangsi".

(2) Semua elemen yang lebih kecil daripada "base" dialihkan ke kiri "base"; semua elemen yang lebih besar daripada "base" dialihkan ke kanan "base".

(3) Ulang langkah pertama dan kedua untuk dua subset di sebelah kiri dan kanan "garis dasar" sehingga hanya satu elemen kekal dalam semua subset.

Sebagai contoh, terdapat set data {85, 24, 63, 45, 17, 31, 96, 50}.

Langkah pertama ialah memilih elemen tengah 45 sebagai "garis dasar". (Nilai asas boleh dipilih sewenang-wenangnya, tetapi memilih nilai di tengah lebih mudah difahami.)

Langkah kedua ialah membandingkan setiap elemen dengan "garis dasar" untuk membentuk dua subset, satu "kurang daripada 45" dan satu lagi "lebih besar daripada atau sama dengan 45".

Langkah ketiga ialah mengulangi langkah pertama dan kedua untuk dua subset sehingga hanya satu elemen kekal dalam semua subset.

Yang berikut merujuk kepada maklumat di Internet dan menggunakan bahasa Javascript untuk melaksanakan algoritma di atas.

Pertama, tentukan fungsi quickSort yang parameternya ialah tatasusunan.

var quickSort = function(arr) {
};
Salin selepas log masuk

Kemudian, semak bilangan elemen dalam tatasusunan, dan jika kurang daripada atau sama dengan 1, kembalikannya.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
};
Salin selepas log masuk

Seterusnya, pilih "pivot" dan pisahkannya daripada tatasusunan asal, kemudian tentukan dua tatasusunan kosong untuk menyimpan dua subset, satu kiri dan satu kanan.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2) ;
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
};
Salin selepas log masuk

Kemudian, mula melintasi tatasusunan, meletakkan elemen yang lebih kecil daripada "garis dasar" ke dalam subset kiri dan elemen yang lebih besar daripada "garis dasar" ke dalam subset kanan.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2) ;
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
};
Salin selepas log masuk

Akhir sekali, gunakan rekursi untuk mengulangi proses ini untuk mendapatkan tatasusunan yang diisih.

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1);
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat(pivot, quickSort(right));
};
 
var dataArray = [85,24,63,45,17,31,96,50];
console.log(dataArray.join(","));
console.log(quickSort(dataArray).join(","));
Salin selepas log masuk

Saya harap artikel ini akan membantu reka bentuk pengaturcaraan JavaScript semua orang.

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