Python排序和二分查詢
阿新 • • 發佈:2018-12-03
import random def bubbleSort(arr): for i in range(0, len(arr)): for j in range(0, len(arr)-1-i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] def inserSort(arr): for i in range(0, len(arr)): min_index = i for j in range(i+1, len(arr)): if arr[min_index] > arr[j]: min_index = j arr[i], arr[min_index] = arr[min_index], arr[i] def selectionSort(arr): for i in range(0,len(arr)): for j in range(i+1,0,-1): if j < len(arr) and arr[j] < arr[j-1]: arr[j], arr[j-1] = arr[j-1], arr[j] def quickSort(arr, l, r): if r - l < 1: return p = parttition(arr, l, r) quickSort(arr, l, p-1) quickSort(arr, p+1, r) def parttition(arr, l, r): rv = random.randint(l, r) #隨機數,降低分佈不均的概率 arr[l], arr[rv] = arr[rv], arr[l] v = arr[l] j = l for i in range(l+1, r+1, 1): if arr[i] < v: j += 1 arr[i], arr[j] = arr[j], arr[i] arr[j], arr[l] = arr[l], arr[j] return j def binarySearch(arr, target): l = 0 r = len(arr) - 1 while l <= r: #temp = (r + l) / 2 temp = l + (r - l) / 2 #防止溢位 mid = int(temp) if arr[mid] == target: return mid elif target < arr[mid]: r = mid - 1 elif target > arr[mid]: l = mid + 1 return -1 arrtest=[765,35,7846,645,633,63453,3,99,7,0,3,1023,12,56,256,238,43,39,7,555,392,8,23,620,65,765,43,54,3553] print(arrtest) bubbleSort(arrtest) print(arrtest) arrtest1=[765,35,7846,645,633,63453,3,99,7,0,3,1023,12,56,256,238,43,39,7,555,392,8,23,620,65,765,43,54,3553] inserSort(arrtest1) print(arrtest1) arrtest2=[765,35,7846,645,633,63453,3,99,7,0,3,1023,12,56,256,238,43,39,7,555,392,8,23,620,65,765,43,54,3553] selectionSort(arrtest2) print(arrtest2) arrtest3=[765,35,7846,645,633,63453,3,99,7,0,3,1023,12,56,256,238,43,39,7,555,392,8,23,620,65,765,43,54,3553] quickSort(arrtest3, 0, len(arrtest3)-1) print(arrtest3) t = binarySearch(arrtest,633) print(t) t = binarySearch(arrtest,54) print(t)
結果: