廣州Python面試總結 - 冒泡算法 二分查找算法(Python筆試)

一、近期面試筆試題

  1. 冒泡算法 --》請手寫一個冒泡算法?
  2. 二分查找算法 --》請用C/C++、Java、Python其中一個編程語言實現二分查找算法;給定一個有序(升序)整型數組A,可含有重複元素,找出最小的下標L,使得A[i]等於整數target,下標不存在則返回-1。
  • 冒泡算法和二分查找算法在廣州的筆試中經常出現,需要重點熟悉一下。

二、解析

1.請手寫一個冒泡算法

這道題是我在面試廣州迪奧信息科技的第一道關卡,也就是面試前的筆試題,因爲沒有了解過就中招了,而且在後面的面試中也被問到了,“請簡單的說說冒泡算法原理”,很無奈,我只能告訴他冒泡我沒有了解過,又失去了一次面試的機會。

2.冒泡算法介紹

  • 冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。
  • 它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從從Z到A)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。
  • 這個算法的名字由來是因爲越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。

3.算法的原理

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
    在這裏插入圖片描述

4.使用Python3實現

以下爲Python3代碼實現冒泡算法,其他語言可自行baidu:

l=[5,3,6,2,1,4,8,7,9]
for i in range(len(l)-1):  # 這個循環負責設計冒泡排序進行的次數
    for j in range(len(l)-1-i):		# j爲列表下標
        if l[j] > l[j+1]:
            l[j],l[j+1] = l[j+1],l[j]
print(l)

三、二分查找算法

1.請用C/C++、Java、Python其中一個編程語言實現二分查找算法;給定一個有序(升序)整型數組A,可含有重複元素,找出最小的下標L,使得A[i]等於整數target,下標不存在則返回-1。

二分查找算法是探跡面試的第一道關卡,也是筆試題第二題,共八道題就有三道算法題,可見算法的重要性。

2.二分查找算法介紹

  • 二分法查找適用於數據量較大時,但是數據需要先排好順序。主要思想是:(設查找的數組區間爲array[low, high])。
  • 簡單說:一維數組,折半查找
  1. 確定該區間的中間位置K。
  2. 將查找的值T與array[k]比較。若相等,查找成功返回此位置;否則確定新的查找區域,繼續二分查找。區域確定如下:a.array[k]>T 由數組的有序性可知array[k,k+1,……,high]>T;故新的區間爲array[low,……,K-1]b.array[k]<T 類似上面查找區間爲array[k+1,……,high]。每一次查找與中間值比較,可以確定是否查找成功,不成功當前查找區間將縮小一半,遞歸查找即可。時間複雜度爲:O(log2n)。

3.二分查找算法的原理

  • 假如有一組數爲3,12,24,36,55,68,75,88要查給定的值24.可設三個變量front,mid,end分別指向數據的上界,中間和下界,mid=(front+end)/2.
  1. 開始令front=0(指向3),end=7(指向88),則mid=3(指向36)。因爲a[mid]>x,故應在前半段中查找。
  2. 令新的end=mid-1=2,而front=0不變,則新的mid=1。此時x>a[mid],故確定應在後半段中查找。
  3. 令新的front=mid+1=2,而end=2不變,則新的mid=2,此時a[mid]=x,查找成功。
  • 如果要查找的數不是數列中的數,例如x=25,當第三次判斷時,x>a[mid],按以上規律,令front=mid+1,即front=3,出現front>end的情況,表示查找不成功。

4.使用Python3實現

mylist = [20,50,22,-22,0,15,222,28,29,99,1999,100823,55,35,5,1,2,3,8,9,55,10239,234234]
def lgfind(arr,v):        
	arr = sorted(arr)# 排序數組,從小到大    
	print(arr)        
	start = 0 # 變量開始    
	arrLen = len(arr)-1 # 變量結束     
	while( start <= arrLen ):               
		mid = (start + arrLen) // 2 # 變量中間值          
		print('mid',mid)                
		# 如果中間的找到直接返回        
		if arr[mid] == v:            
			return v   
		# 比對大小,看看我們要的結果是在上半段,還是下半段        	
		if arr[mid] > v:            
			arrLen= mid - 1 # 結果在上半段        
		else:            
			start= mid + 1 # 結果在下半段      
	return false # 沒有則返回假    
have = lgfind(mylist,28)
print(have)

四、總結

在目前這個時間,IT的找工作一般分爲三部曲:

  1. 投簡歷;
  2. 線下筆試/線上測試;
  3. 面試(n+1面)
    而算法在筆試中常出現,在面試前可以多多熟悉,沒面上也不用灰心,總結再戰。
    用誰說過的話:在哪跌倒就在哪裏躺下。

以上理論來自百度百科。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章