扭轉有序陣列 查詢指定元素

2021-08-21 07:03:13 字數 793 閱讀 1409

面試題:

//扭轉後的有序陣列,找到指定的數,返回下標,找不到時返回-1

//樣例輸入:3,4,5,6,7,1,2 查詢數字7

//樣例輸出:4

審題:有序,扭轉,那麼一部分是有序的,一部分是無序的

思路:二分查詢,必須找到

關鍵點在於:

1.利用中間元素去判斷,因為是已經有序的,

如果左側小於它,而扭轉後的元素一定是比start都小,基於這點可以判斷左側有序。右側同理。

如果key又正好在這中間,則可以縮小範圍;如果key不在這區域,那麼在右側

充分利用二分查詢,先確定哪側是有序

2. 如果元素在左側,在判斷的時候發現右側有序,將重新設定last下標,逐步的縮小範圍,最後得到元素所在點

#include

int binsearch(int *arr,int len,int key)

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

else

}//中間比左邊小,左邊無序,右邊有序

else

if(arr[mid]//如果key處於中間與右邊之間

if(arr[mid]=key)

else}}

return -1;

}int main()

; int data=binsearch(arr,7,7);

printf("index is:%d ",data);

return

0;}

結果:

index is:4

在旋轉有序陣列中查詢元素

1.題目 給定乙個旋轉的有序陣列,比如是旋轉之後得到的,在陣列中查詢是否存在元素key。要求時間複雜度為o lgn 假定陣列中不存在重複元素。2.分析 從上面的選擇陣列可以發現,array middle 將陣列分成兩段,兩段中必有一段是有序的。這樣就可以使用二分查詢了。乙個變形的二分查詢。3.1 i...

演算法 部分有序陣列元素查詢

查詢某元素是否在在陣列中返回位置,要求時間複雜度不能大於o n 使用二分查詢 問題的關鍵在於找到最大值所在位置 屬於前半部分就在前半部分二分查詢,否則在後半部分二分查詢 func search arr int value int int?else if value arr 0 value arr m...

23 刪除有序陣列中的元素,陣列仍然有序 陣列

刪除乙個有序陣列的乙個元素,採用兩個陣列實現 實現 2017年6月19日16 16 31 功能 刪除陣列中乙個資料之後陣列依然有序 include stdio.h define m 9 int main int b m 1 int i,j,num bool flag printf 請輸入將要刪除的資...