Saya telah melihat cara menghitung swap dan perbandingan untuk bubble sort dan memodifikasi program shaker sort menjadi ini:
public void shakerSort(int a[]) // http://www.geeksforgeeks.org/cocktail-sort/
{
boolean swapped = true;
comparisons = 0;
swaps = 0;
int start = 0;
int end = a.length;
while (swapped==true)
{
swapped = false;
for (int i = start; i < end-1; ++i)
{
comparisons++; //count comparisons
if (a[i] > a[i + 1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
swapped = true;
swaps++; //count swaps
}
}
if (swapped==false)
{
break;
}
swapped = false;
end = end-1;
for (int i = end-1; i >=start; i--)
{
comparisons++; //count comparisons
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
swapped = true;
swaps++; //count swaps
}
}
start = start+1;
}
}
Namun, untuk array 100 elemen yang jumlah perbandingannya harus selalu 4950 ( n(n-1)/2 ), ini memberi saya nilai yang berubah setiap kali saya menjalankan program- dan nilai ini selalu kurang dari 4950 .
Mengapa ia melakukan ini, dan bagaimana cara memperbaikinya?
(CATATAN: Array diacak setiap kali program dijalankan)
Juga, apakah jumlah swapnya oke?
while(swap)
sekarang, Itu HARUS menjadi alasan variasi hitungan. pikirkan jika tidak ada variabel yang ditukar danswap
Anda tidak berubah menjaditrue
. maka itu adalahfalse
. jadi dalam hal ini, program tidak akan berputar-putar. Itulah satu-satunya alasan untuk penghitungan yang berbeda. Saya tidak yakin tentang logika penyortiran. tapi putaran itu pasti membuat semua perubahan. - person Jay Joshi   schedule 03.12.2017swap
hitungannya juga sempurna.! - person Jay Joshi   schedule 03.12.2017