# Sắp xếp và Tìm kiếm
## Sắp xếp
### Sắp xếp nổi bọt
Sau mỗi một lần lặp, phần tử lớn nhất sẽ ở vị trí đúng. Cứ tiếp tục như vậy, ta sẽ có một mảng đã được sắp xếp.
```cpp
for (int i=0;i<n;i++){
for (int j=0; j<n-1;j++){
if (a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
```
Độ phức tạp: $O(N^2)$
## Tìm kiếm
### Tìm kiếm tuần tự
Duyệt qua tất cả các phần tử.
```cpp
for (int i=0;i<n;i++){
if (a[i]==k){
return true;
}
}
```
Độ phức tạp: $O(N)$.
### Tìm kiếm nhị phân
Sử dụng trên dãy đã được sắp xếp. Lần lượt chia nhỏ mảng để tìm kiếm.
```cpp
int l=0,r=n-1;
while (l<=r){
int mid=(l+r)/2;
if (mid==k){
return true;
}
if (a[mid]>k){
r=mid-1;
}
else{
l=mid+1;
}
}
```
Độ phức tạp: $O(log N)$.