在我的程序中,我使用二進制搜索來查找元素應該屬於的位置,將它放在正確的位置並將元素向右移動一個空格,以便數組仍然是有序的。我可以在我的二進制文件中找到它所屬的位置,但是我很難將它放在正確的位置並且改變其他元素。元素是從一個文本文件中一次讀取(按順序插入),所以理想情況下它的行爲如下:17來 - > [17,..],65來 - > [17,65,..], 20來 - > [17,20,65,..]等我的輸出是完全錯誤的。用我的代碼輸出是:41 55 48 34 84 78 89 94 61 108 74 76 97 62 121 119 132 110 144 156 160 146 164 170 75這是完全無序的:(無法移動陣列中的數組元素
這是我的代碼:
static void insertInOrder(int[] arr, int cnt, int newVal)
{
//arr is assumed to be big enough for values + it's an empty array
int binaryIndex = bSearch(arr,cnt,newVal); //returns a negative value if not duplicate
int positiveIndex = (-(binaryIndex))-1; //transforms binaryIndex into a positive value of the correct index where number belongs
for (int i = arr.length-1;i>=positiveIndex;i--){
if (i<=0)break;
arr[i]=arr[i-1];
}
arr[positiveIndex]=newVal;
}
這裏是我的bSearch:
public static int bSearch(int[] a, int cnt, int key)
{
int high = cnt-1;
int low = 0;
int mid = (high+low)/2;
while (low <= high) {
if (key==a[mid]){
return mid;
}
else if (key < a[mid]){
high = mid-1;
mid = (high+low)/2;
}
else {
low = mid +1;
mid = (high+low)/2;
}
}
return -(mid+1);
}
很難如果沒有實施bSearch,告訴發生了什麼問題。其他代碼似乎相當合理。 – gregkow
什麼是'bSearch'?特別是,如果價值不存在,它會返回什麼? –
bSearch是一個返回元素應該放在數組中的位置的方法。它基本上是一個修改的二進制搜索。 – ComicStix