迴圈有序陣列中最小元素的查詢(二分查詢)

2021-09-29 16:19:06 字數 1059 閱讀 5271

問題描述:

如題,其中迴圈有序陣列指的是對有序陣列進行迴圈移位後的結果,如[7,8,9,0,1,2,3,4,5,6];

實現思路:

由迴圈有序陣列結構可知,若陣列不為整體有序,則最小值一定是處於無序子串行之中,如上述例子中,最小值一定處於7到1之間,而一定不處於1到6之間,根據該性質可以得到如下演算法:

先進行判斷該陣列是否整體有序(arr[left] < arr[right]),若有序返回left即可。

對於整體無序情況(arr[left] < arr[right]),mid = left + (right - left) / 2,判斷left - mid 和 mid - right是否為有序,

若arr[mid] > arr[right] 對mid - right部分進行查詢,arr[mid] < arr[left] 對left - mid 部分進行查詢.;

若以上條件均不滿足即(arr[mid] <= arr[right] && arr[mid] >= arr[left]),又由於arr[left] >=arr[right] 所以可得:

arr[mid] = arr[left] = arr[right],對於該情況只能採用從頭到尾的方式進行搜尋了。

具體實現**如下:

public static int selution(int arr) 

mid = left + (right - left) / 2;

// arr[left] >= arr[right]

if (arr[mid] < arr[left])

if (arr[mid] > arr[right])

if (arr[mid] >= arr[left] && arr[mid] <= arr[right])

}return arr[left] < arr[right] ? left : right;// 返回left right 中最小的

}public static int findmin(int arr, int left, int right)

}return minindex;

}

尋找有序陣列的反轉陣列中最小的元素

尋找有序陣列的反轉陣列中最小的元素 1.利用二分查詢法查詢。設定兩個指標,分別指向陣列的第乙個p1和最後乙個元素p2。2.得到陣列中間位置的元素,將這個元素與第乙個元素比較,如果大於第一元素,證明這個最小的數字在這個中間元素的後面,此時將p1指向中間元素的下乙個位置 如果中間元素小於第乙個元素,那麼...

迴圈有序陣列二分查詢

演算法描述,乙個有序的陣列,從開始到中間擷取一段陣列放到陣列的尾部,這個陣列會變成迴圈有序的陣列,在這個迴圈有序的陣列中進行二分查詢 例如 1,2,3,4,5,6,7,8,9 擷取前4位放到尾部會變成5,6,7,8,9,1,2,3,4 變成迴圈有序的陣列 演算法實現 採用二分查詢的方式,獲取中間的乙...

迴圈有序陣列查詢值

迴圈陣列,即有序的陣列進行移位後的陣列。如 4,5,6,7,8,0,1,2,3 查詢值是否存在時,利用二分的思想。步驟 while lmid key,return mid。如果a mid l 說明l mid是有序的,mid 1 r是迴圈的 如果key mid key a l 則key在l mid 1...