scala實現快排,歸併,冒泡,二分查詢

2021-09-29 23:33:36 字數 1534 閱讀 6122

快速排序使用分治的思想,選定乙個基準點,通過一趟排序將待排序的序列分為左右兩個部分,其中左邊的部分都比基準點要小,右邊的基準點都比基準點要大,之後在分別對左右兩邊的部分,按照相同的思想繼續切分,最終達到乙個有序佇列的目的

時間複雜度:o(nlog(n))

空間複雜度:o(log(n))

def quicksort(list: list[int]): list[int] = 

}}

歸併排序就是將兩個無序的列表合併乙個有序列表,通過不斷的切分列表知道剩下乙個元素,在進行合併,最終形成有序列表

時間複雜度:o(nlog(n))

空間複雜度:o(n)

def mergedsort[t](less:(t,t)=>boolean)(list:list[t]):list[t] = }}

val n = list.length/2

if(n == 0) list

else

}

氣泡排序是一種交換排序,從無序佇列的頭部開始,按照指定的排序規則,相鄰元素兩兩比較,滿足條件則進行交換位置,達到實現有序佇列的目的。

時間複雜度:o(n^2)

空間複雜度:o(1)

def compute(data: int, list: list[int]):list[int] = 

} def bubblesort(list:list[int]):list[int] = list match

二分查詢也叫折半查詢,實現二分查詢是必須建立在已經排好序的陣列上,先將要查詢的值跟中間值做比較,如果比中間值小,就從左半邊的陣列繼續查詢,如果比中間值打就從右半邊的陣列中查詢。

優點查詢次數少,查詢速度快,平均效能好

缺點要求待查詢陣列必須是已經排好序的列表,且插入刪除困難

因此二分查詢使用與不經常變動但經常查詢的列表

時間複雜度:o(log2n)

空間複雜度:o(1)

def binarysearch2(array: array[int], l: int, r: int, findval: int): arraybuffer[int] = 

val midindex = (l + r) / 2

val midval = array(midindex)

if (midval > findval) else if (midval < findval) else ")

val resarr = arraybuffer[int]()

var temp = midindex - 1

breaks.breakable

if (array(temp) == findval)

temp -= 1}}

temp = midindex + 1

breaks.breakable

if (array(temp) == findval)

temp += 1}}

return resarr

}}

模板題 快排 歸併 二分

include using namespace std const int n 1000010 int q n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain include using na...

二分查詢,ruby快排,歸併,ruby實現

都是採用遞迴方法,針對有序陣列。以下 前者針對含有重複的有序陣列,如 1,1,1,1,2,2,3,3,3,4,5,5,5,6 查詢最後乙個值等於要查詢的值。後者是普通的二分查詢 二分查詢 查詢最後乙個值等於給定值的元素 返回結果是陣列的下標,不能直接返回值,因為重複值無法體現是否真正返回最後乙個。d...

排序 冒泡,快排,歸併。

1 冒泡 就是每次相鄰的比較,較大的移到後面,一次後就移動最大的到最後面了。include void maopao int a,int len void main int len sizeof a sizeof a 0 maopao a,len for int x1 0 x12 快速排序,用遞迴來理...