我已經編寫了堆排序算法,但我很難決定什麼應該被視爲比較。我認爲下面會朝着比較,但我得到的結果有利於似乎離我(受到了很多,也許?)這裏的代碼
當考慮堆比較時,你認爲什麼是比較?
public class heapsort{
static int counter = 0;
public static void main(String[] args) {
//int[] a1={1, 16, 2, 3, 14, 4, 5, 12, 7, 10, 8, 9, 17, 19, 21, 23, 26, 27};
int[] a1 = {1, 2};
System.out.println(sort(a1));
for(int i=0;i<a1.length;i++){
System.out.print(a1[i] + " ");
}
}
private static int[] a;
private static int n;
private static int left;
private static int right;
private static int largest;
public static void buildheap(int[] a){
n= a.length-1;
for(int i= n/2; i >= 0; --i){
maxheap(a,i);
}
}
public static void maxheap(int[] a, int i){
left=2*i;
right=2*i+1;
if(left <= n && a[left] > a[i]){
counter++;
largest=left;
}
else{
counter++;
largest=i;
}
if(right <= n && a[right] > a[largest]){
counter++;
largest=right;
}
if(largest!=i){
counter++;
exchange(i,largest);
maxheap(a, largest);
}
}
public static void exchange(int i, int j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
public static int sort(int []a0){
a=a0;
buildheap(a);
for(int i=n;i>0; --i){
exchange(0, i);
n=n-1;
maxheap(a, 0);
}
return counter;
}
}
我知道有些計數器可能是錯的,建議?
這是不是很清楚你在這裏問什麼。 –
關鍵是要找出算法的有效性。手工操作時,必須對數組中的值進行比較。我何時應該考慮進行比較,以便可以在比較計數中加上+1?這是爲了找到算法的最佳情況和最壞情況 – Ceelos
好吧;您的問題中沒有任何內容描述您正在嘗試**計數**比較的事實。 –