trong bài sắp xếp chọn em nếu em khởi tạo min_pos=0 thì lúc log ra nó đưa giá trị lớn nhất lên đầu rồi tiếp theo là gtri đã sắp xếp. Em làm tăng dần như anh. Bài code đầu tiên á anh(selection sort). Anh giải thích chỗ này giúp em vs
Thầy của em có thể dạy chán rồi nên ko muốn giảng kỹ hơn hoặc là thầy không đặt vị trí của thầy vào bọn em nên chỉ dạy tới mức đó thôi. Tự tìm hiểu thôi e
anh ơi cho em hỏi cái thuật toán counting_sort , chỗ khai báo int cnt[10000001] em để trong hàm main chạy thì nó không hiện lên gì , còn để ngoài hàm main nó chạy được bình thường ạ
@@17huynhquochieu32 không có thuật toán sx tối ưu nhất, nó còn phụ thuộc vào tập dữ liệu đem đi sắp xếp nữa. Cũng như việc bạn đi từ A tới B bằng các loại xe khác nhau, không phải ai cũng có khả năng lái xe phân khối lớn. Người ta cần đi từ xe có phân khối nhỏ- tương tự các thuật toán sắp xếp cơ bản trước rồi mới sang xe phân khối lớn hơn là các thuật toán sắp xếp nâng cao, khó hiểu, tối ưu hoen
giả sử mình có 5 phần tử 1 3 7 5 4 , với i=0 là phần tử 1, với i=1 là 3, i=2 là 7, i=3 là 5, i=4 là 4. vậy bình thường sẽ là sét từ i=0 đến i= n -1(hay i
anh cho em hỏi vs ạ,ở phần sắp xếp chọn em ko sử dụng biến min_pot để lưu giá trị nhỏ nhất, ở dưới em swap trực tiếp a[i] vs a[j] luôn ko cần thông qua biến min_pot vẫn ra kết quả đúng, làm như vậy có đc ko ạ
Counting Sort O(n + k), nhưng khi triển khai code ở phần đếm tần suất là O(n), rồi đoạn in ra các phần tử có 2 for lồng nhau là O(n^2) => tổng là O(n) + O(n^2) đúng không ạ, hay e đang tính sai ạ
Anh cho em hỏi tại sao khi khai báo thằng cnt[INT_MAX] trong int main() nó không chạy còn ở ngoài thì chạy bình thường vậy anh (nó bị tràn bộ nhớ hay sao ah).
@@sunisshining2515ap nó gồm key và value (key là độc nhất), có thể thay đổi kích thước Nó cũng giống mảng thường nhưng key thì có thể là kiểu dữ liệu khác thay vì số nguyên ko âm như map["abc"], map[-1], map[1.5],...
#include using namespace std; int main(){ int cnt[10000001]; cout > n; int a[n]; int m = INT_MIN; cout > a[i]; cnt[a[i]]++; m = max(m,a[i]); } for (int i = 0; i
Thông tin các khóa học mình đang hướng dẫn : 28tech.com.vn/
Đỉnh quá anh ạ. Làm nhiều thuật toán mà không thấy có Playlist thuật toán
trong bài sắp xếp chọn em nếu em khởi tạo min_pos=0 thì lúc log ra nó đưa giá trị lớn nhất lên đầu rồi tiếp theo là gtri đã sắp xếp. Em làm tăng dần như anh.
Bài code đầu tiên á anh(selection sort).
Anh giải thích chỗ này giúp em vs
Dễ hiểu quá, cám ơn anh♡
OK chúc em học tốt :D
anh ơi sắp xếp chèn này mà có n phần tử thì mô phỏng hình học sẽ có n bước hả anh
em code cái sắp xếp chèn ntn có hợp lý không anh
void sapxepchen(int mang[],int n)
{
for (int i=1; i=0; j--) {
if(key
Dạ, em cảm ơn thầy nhiều ạ
🤗🤗🤗
Đỉnh quá a ơii 😍
ước gì anh làm giáo viên lớp em, anh giảng dễ hiểu hơn thầy em cả nghìn lần
Thầy của em có thể dạy chán rồi nên ko muốn giảng kỹ hơn hoặc là thầy không đặt vị trí của thầy vào bọn em nên chỉ dạy tới mức đó thôi. Tự tìm hiểu thôi e
anh ơi cho em hỏi cái thuật toán counting_sort , chỗ khai báo int cnt[10000001] em để trong hàm main chạy thì nó không hiện lên gì , còn để ngoài hàm main nó chạy được bình thường ạ
e để trong hàm main nó còn lặp vô hạn cơ=)))
tuyệt vời quá anh oii
@@trungucpham1866 thank you 🤩🤩🤩
cho em hỏi ở đoạn bubblesort, giả dụ em lấy n=3, thì vòng for của j của em sẽ lần lượt tăng từ j=0 , nhưng cái điều kiện j
Thì giảm dần mà em vì những phần tử ở phía sau nó đc sắp xếp tăng dần
@@28tech_ thế cái điều kiện j
@@vinhphucdang4959 là mỗi lượt sắp xếp thì nó sẽ có 1 phần tử lớn nhất ở phía sau rồi nên lần xét kế tiếp chỉ cần xét đến những phần tử ở trước đó
mong anh ra series về cấu trúc dữ liệu và thuật toán
Đầy thuật toán rồi còn gì :D. Ờ có thời gian thì mình sẽ làm.
a ơi dùng counting sort dùng map đếm tần suất thì các key của nó được sắp xếp sẵn rồi sau đó chỉ cần xuất ra theo tần suất của nó có được không a nhỉ
Nhưng nó chạy chậm hơn dùng mảng để đếm đấy em ạ
@@28tech_ vâng ạ
mik thắc mắc là tại sao phải học nhiều thuật toán sx trong khi mik chỉ cần 1 cái tối ưu nhất🤔
@@17huynhquochieu32 không có thuật toán sx tối ưu nhất, nó còn phụ thuộc vào tập dữ liệu đem đi sắp xếp nữa. Cũng như việc bạn đi từ A tới B bằng các loại xe khác nhau, không phải ai cũng có khả năng lái xe phân khối lớn. Người ta cần đi từ xe có phân khối nhỏ- tương tự các thuật toán sắp xếp cơ bản trước rồi mới sang xe phân khối lớn hơn là các thuật toán sắp xếp nâng cao, khó hiểu, tối ưu hoen
dạ anh ơi cho em hỏi ở thuật selectionsort sao lại cho vòng for chạy từ i = 0 đến i < N-1 vậy ạ
giả sử mình có 5 phần tử 1 3 7 5 4 , với i=0 là phần tử 1, với i=1 là 3, i=2 là 7, i=3 là 5, i=4 là 4. vậy bình thường sẽ là sét từ i=0 đến i= n -1(hay i
anh ơi cho em hỏi cái countingsort á anh em khai báo mảng count ngoài hàm main chạy nó báo lỗi vậy anh
cái bubble sort nếu mình muốn in ra từng mảng sau khi vừa đổi vị trí cho nhau thì sao a
Thêm vòng for in trong vòng lặp chính của thuật toán ấy e
anh ơi em muốn hỏi cách cài đặt để xem đoạn code nó chạy như thế nào giống bên góc góc phải của anh thì cài đặt như thế nào vậy ạ. em cảm ơn ạ!
Đó là anh in ra mà. Dùng cout để in ra đó
cho e hỏi ở insertsort sao chỗ kia lại dùng --pos mà k phải pos-- vậy a?
ủa thầy ơi cho e hỏi là dòng 9 thì tại sao nó lại là j=i+1 vậy ạ e chưa hiểu ạ. Mong thầy giải thích e cảm ơn ạ!!!
thuật toán countingsort vẫn dùng cho mảng có phần tử âm được đó anh.Em lưu tần suất vào map rồi gán lại vào mảng ban đầu
Haha, cái này thì người ta lại ko gọi là counting sort đâu. :D. Còn nếu dùng map thì cũng không cần vector cũng được mà.
Dùng map thì độ phức tạp nó là NLogN rồi.
anh ơi cho em hỏi ở thuật toán insertionsort nếu ko dùng x để lưu a[i] thì mình gán a[i] trực tiếp vô luôn được không
Nó có bước cập nhật mà e, sẽ bị sai đó em.
giảng đếm ko biết bao nhiêu chữ ok, hạn chế lại sẽ hay hơn
anh cho em hỏi vs ạ,ở phần sắp xếp chọn em ko sử dụng biến min_pot để lưu giá trị nhỏ nhất, ở dưới em swap trực tiếp a[i] vs a[j] luôn ko cần thông qua biến min_pot vẫn ra kết quả đúng, làm như vậy có đc ko ạ
Uh được em nó vẫn sort đc
Counting Sort O(n + k), nhưng khi triển khai code ở phần đếm tần suất là O(n), rồi đoạn in ra các phần tử có 2 for lồng nhau là O(n^2) => tổng là O(n) + O(n^2) đúng không ạ, hay e đang tính sai ạ
Nhìn nó là 2 for lồng nhưng thực tế tổng số lần mình in ra chỉ là b phần tử em ạ. Kèm thêm duyệt từ 0 tới k nữa
@28tech_ Em thấy Bubble Sort không khác gì so với Interchange Sort phải không ạ?
Ko em ơi bubble hoán vị 2 thằng đứng cạnh nhau, interchange hoán đổi thằng a(i) vs những thằng đứng sau nó
@@28tech_ Trong C không có khái niệm truyền tham chiếu mà chỉ có truyền tham trị với cả truyền con trỏ ở trong hàm phải không ạ?
cái int cnt[10000001] trên đầu là gì vậy ạ. Là đếm nhưng e chưa bao h đêm kiểu này @@
A ơi . S em tìm hiểu cùng là nổi bọtaf lại có quá nhiều cách làm vậy ạ . cùng là c++ mà mỗi người lại biến tấu cái vòng lặp for thứ 2 khác nhau ạ
Có 2 kiểu thôi em, 1 là đưa phần từ lớn nhất về cuối 2 là đưa phần tử nhỏ nhất về đầu
hay quá idol
OK e tú nhé.
Ở cái bubble sort cho em hỏi tại sao i phải chạy đến n-2 v ạ nếu cho nó chạy đến phần tử cuối luôn thì sẽ ra sao
Thì nó xét phần tử ko thuộc mảng
@@28tech_ nếu vậy thì kết quả vẫn đúng chỉ có tốn thêm tgian chạy thôi đúng ko a
@@datnee20318 không em ạ, phần tử ko thuộc mảng nó có thể rác nên có thể ảnh hưởng tới kết quả của em
@@28tech_ vậy cho em hỏi luôn là biến i có thể được hiểu như là số lượt so sánh ko ạ
Biến i là gì thế anh ơi
Anh cho em hỏi tại sao khi khai báo thằng cnt[INT_MAX] trong int main() nó không chạy còn ở ngoài thì chạy bình thường vậy anh (nó bị tràn bộ nhớ hay sao ah).
Uh ko khai báo đc mảng lớn cỡ đó trong main đâu
A ơi giải thích giúp e e chưa hiểu 2 cái for đầu á anh😢
em cảm ơn a
Oke, chúc em học tốt
sao phải khai báo cnt[] ở ngoài main thế a e cho vào hàm main thì ko được mặc dù e giới hạn cnt[20]
Cnt 20 thì e chỉ đếm đc các phần tử nhỏ hơn hoặc bằng 20
Khai báo ngoài main để tránh tràn stack
Cộng phân phối xâu đi thầy
Đã gọi là thuật toán thì k đc dùng những thư viện có sẵn như map hay set đúng k a :v
Dùng bình thường đi :v. Thoải mái.
cái INT_MIN là cg anh với lại dùng để làm gì ạ
INT_MIN là giá trị nhỏ nhất của kiểu dữ liệu min, khi tìm số lớn nhất trong mảng thì hay khởi tạo biến đó là một giá trị rất nhỏ.
10:44 em tưởng phải dùng toán tử & thì mới thay đổi mảng chứ anh?
dễ hiểu quá a ơi
a có dạy html css ko a
Anh có khoá front end đó, em tham khảo 28tech.com.vn/lap-trinh-front-end.html
tại sao em khai báo int i ở trong vòng for nó cứ báo lỗi và bắt phải khai báo i ở bên ngoài vậy ạ :((
Do em đang code vs chuẩn C thấp quá. Em lưu file .cpp hoặc chạy chuẩn C cao hơn
@@28tech_ dạ em cảm ơn anh
tại sao lại là n - 1 v ạ em nghe đi nghe lại cx ko hình dung ra đc
Vì mảng có n phần tử em chỉ cần đưa n-1 phần tử về vị trí thì thằng còn lại tự khắc sẽ về đúng vị trí nha
cho em xin tài liệu pdf anh dùng này được không ạ
anh ơi em có thắc mắc hơi ngu 1 tí là mình học những cách sắp xếp này để làm gì ạ, vì độ phức tạp của nó đều là O(n*2) và O(n+k)
do nó đơn giản dễ hiểu
A ơi em xin file các thuật toán sắp xếp với ạ.
Anh ơi web anh dùng chạy thử code là j vậy ạ em đang học chuyên tin nên cx cần bt ạ anh cho em xin với
visual go thì phải em ạ.
Em cảm ơn bao h anh lm một video review các web học tin anh ạ nhiều bạn cx giống như em đang cần bt cái đó
Lâu rồi k thấy anh
Hehe. Đợt này a bận quá.
em góp ý xiu anh nói đừng ok đc k ạ
counting sort mình dùng map được ko anh
cho mình hỏi map là gì ạ, có thể học ở đâu
@@sunisshining2515ap nó gồm key và value (key là độc nhất), có thể thay đổi kích thước
Nó cũng giống mảng thường nhưng key thì có thể là kiểu dữ liệu khác thay vì số nguyên ko âm
như map["abc"], map[-1], map[1.5],...
ah đừng có oke nữa oke -.- coi mà bực á oke
oke
haha :D, giờ ít nói ok rồi hehe.
Anh dạy bên full house phải không nhỉ
Uh thi thoảng mình nhận 1 lớp.
mấy cái thuật toán này để làm gì khi đã có hàm sort hả anh :
Haha. Đôi khi biết chỉ để có kiến thức thôi. 😆😆
Cần không mình ném cái đề học sinh giỏi cho khỏi dùng cái hàm sort luôn
miễn phí và chất lượng
Quá chất lượng ấy chứ hehe.
@@28tech_ t chưa hiểu lắm chỗ O(n+k) của counting_sort
@@HuyTran-pr8ug Mình duyệt mảng 1 lần mất O(n) với lúc mình duyệt từ số nhỏ nhất tới k là số lớn nhất để in nữa.
@@28tech_ t tưởng chỗ 2 vòng for là O(k^2) nhỉ
cho em xin file pdf dc ko ạ
in tơ chen sọt là dễ nhất rồi anh :)
Haha
Hay quá anh :(((
Ok em ơi ✌🏿✌🏿✌🏿. Hình như hôm trước e mail cho anh thì phải 😂😂😂
Còn này là thuật toán sắp xếp gì a
for(int i=0; i
Này gọi là sắp xếp đổi chỗ trực tiếp
#include
using namespace std;
int main(){
int cnt[10000001];
cout > n;
int a[n];
int m = INT_MIN;
cout > a[i];
cnt[a[i]]++;
m = max(m,a[i]);
}
for (int i = 0; i
Em khai báo mảng cnt trong main bị tràn bộ nhớ stack, khai báo ngoài main thì nó được cấp phát bởi bộ nhớ heap nên ko bị tràn nữa