4つの異なるソート方法で発生するループと比較の回数を数える必要があります。 Selection、Bubble、Insertion、およびQuick sortメソッドを使用しています。理想的には、ループ/比較のたびにloopCounterや++などのintを配置するだけです。このすべてに全く新しいものですが、私はそのようなカウンターを含める必要があるときを区別することができません。あなたが次のコードで見ることができるように、私は複数のカウンターを作成しようとしました。しかし、私は今まで選択カウンタだけが正しいと思います。カウントループと比較
さらに、値がシフトされた回数をカウントする必要があります。つまり、整数が何回交換されたかということです。
これに関するお手伝いをいただければ幸いです。カウンターで
おかげ
ArrayList<Integer> list = new ArrayList<Integer>();
//Counters for Selection Sort
int loopCounter = 0;
int compCounter = 0;
//Counters for Bubble Sort
int loopCounter2 = 0;
int compCounter2 = 0;
//Counters for Insertion Sort
int loopCounter3 = 0;
int compCounter3 = 0;
//Counters for Quick Sort
int loopCounter4 = 0;
int compCounter4 = 0;
public void selectionSort(Integer[] a) {
for(int i = 0; i < a.length; i++) {
int smallestValue = a[i];
int smallestIndex = i;
if(ascButton.isSelected()){
for(int j = i+1; j < a.length; j++) {
if (smallestValue > a[j]) {
smallestValue = a[j];
smallestIndex = j;
loopCounter++;
compCounter++;
}
}
a[smallestIndex] = a[i];
a[i] = smallestValue;
} else if(desButton.isSelected()){
for(int j = i+1; j < a.length; j++) {
if (smallestValue < a[j]) {
smallestValue = a[j];
smallestIndex = j;
loopCounter++;
compCounter++;
}
}
a[smallestIndex] = a[i];
a[i] = smallestValue;
}
}
}
public void bubbleSort(Integer[] a) {
int temp;
for (int i = a.length - 1; i > 0; i--) {
if(ascButton.isSelected()) {
for(int j = 0; j < i; j++) {
loopCounter2++;
compCounter2++;
if(a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
} else if(desButton.isSelected()) {
for(int j = 0; j < i; j++) {
loopCounter2++;
compCounter2++;
if(a[j] < a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}
public void insertionSort(Integer[] a) {
for(int i = 1; i < a.length; i++) {
loopCounter3++;
compCounter3++;
int temp = a[i];
int j = i - 1;
if(ascButton.isSelected()) {
while(j >= 0 && a[j] > temp) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
} else if(desButton.isSelected()) {
while(j >= 0 && a[j] < temp) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
}
public void quickSort(Integer[] a, int left, int right) {
int i = left;
int j = right;
int temp;
int pivot = a[(left + right)/2];
while(i <= j) {
if(ascButton.isSelected()) {
while(a[i] < pivot)
i++;
while(a[j] > pivot)
j--;
} else if(desButton.isSelected()) {
while(a[i] > pivot)
i++;
while(a[j] < pivot)
j--;
}
if(i <= j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
if(left < j) {
quickSort(a,left,j);
}
if(i < right) {
quickSort(a, i, right);
}
}
正確には動作しません。そして、あなたはいくつかのカウンターを増やす時を尋ねるためにそのコードをすべて投稿する必要がありましたか?あなたの質問に[mcve] –
で質問してください。あまり重要でないコードを大部分削除しました。私が言ったように、loopCounter ++とcompCounter ++をどこに挿入すれば、各ソートメソッドのループと比較の数を適切にカウントするかはわかりません。@ cricket_007 – Natecurt3030
ループ回数をカウントする場合は、ループ内で最初にカウンタを増やします。値を比較する回数を数えたい場合は、値を比較するたびにカウンタを増やします。どの部分が不明か? – Andreas