直通BAT面試演算法精講課2

2022-02-03 13:19:21 字數 1900 閱讀 4153

對於乙個int陣列,請編寫乙個氣泡排序演算法,對陣列元素排序。

給定乙個int陣列a及陣列的大小n,請返回排序後的陣列。 

測試樣例:

[1,2,3,5,2,3],6
[1,2,2,3,3,5]

冒泡: 依次比較相鄰,大的放後面。

class

bubblesort } }

return

a; }

};

class

bubblesort }}

return

a; }

};

view code

class

bubblesort }}

return

a;

//write code here

}};

view code

選擇:選擇最小放第一,第二小放第二。

class

selectionsort

}if(minindex!=i)

}return

a; }

};

view code

class

selectionsort

}if(idx !=i)

swap(a[i],a[idx]);

}return

a; }

};

插入: 從第二個開始,小於就互動, 內部維護乙個冒泡。

class

insertionsort }}

return

a; }};

歸併排序: 本質上是乙個遞迴的呼叫。 遞迴拆分然後合併。每個歸併的子集都是有序的。

class

mergesort

__mergesort(a,

0,n-1

);

return

a; }

//[l,r]

void __mergesort(int* a,int l,int

r)

int mid = (l+r)/2

; __mergesort(a,l,mid);

__mergesort(a,mid+1

,r);

__merge(a,l,mid,r);

}//將[l ,mid] [mid,r]進行歸併

void __merge(int* a, int l,int mid,int

r)

int i=l; int j = mid + 1

;

for(int k =l;k<=r; k++)

else

if(j>r)

else

if(aux[i-l]l])

else}}

};

快速排序

//

對arr[l...r]部分進行partition操作

//返回p, 使得arr[l...p-1] < arr[p] ; arr[p+1...r] > arr[p]

template int __partition(t arr, int l, int

r) swap( arr[l] , arr[j]);

returnj;}

//對arr[l...r]部分進行快速排序

template void __quicksort(t arr, int l, int

r)template

void quicksort(t arr, int

n)

直通BAT面試演算法精講課1

1.有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。struct treenode class treeprinter ...

直通BAT面試演算法精講課 動態規劃

1.有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim 小於等於1000 代表要找的錢數,求換錢有多少種方法。給定陣列penny及它的大小 小於等於50 同時給定乙個整數aim,請返回有多少種方法可以湊成aim。測試樣...

直通BAT面試演算法精講 排序(1)

注 所有的 都是用python實現的,都是自己寫的,可能有些地方不太完善 時間複雜度 o n 2 空間複雜度 o 1 思想 依次訪問元素,逆序就置換。一趟排序後最大 小 的被置換到最後 def bubble sort arr,n ifnot arr return none for i in rang...