Quantcast
Channel: Nhà Đất Express
Viewing all articles
Browse latest Browse all 1317

Thuật toán sắp xếp trong lâp trình

$
0
0

Hôm nay tôi muốn đề cập tới một số thuật toán bất li thân của IT chúng ta, đó là các thuật toán bố trí. Ai đã học IT thì chắc đã setup nó trên C hay C++ rồi, nhưng mà cài trên PHP tuy nó vẫn giống nhưng ngày nay trên izwebz chưa có nên tôi có thời cơ được đăng bài này.

XEM thêm : Magento marketplace

Giới thiệu về bản thân một chút, ngày nay tôi đang học tập tại Việt Nam(tại cỗi nguồn trang này từ USA) nên phải giới thiệu tỉ mỉ và mới hoàn thành xong năm nhất.Tôi thích giới thiệu tường tận bởi vì tôi cảm nhận website này khá tốt, nên tôi muốn nguồn kiến thức đưa ra phải đạt một chuẩn nào đó. hy vọngsắp tới mấy anh admin của izwebz sẽ có thể giới thiệu kĩ, và thật về ngày nay của version thân. Tôi thấy trang web của nước ngoài hay thế lắm, tôi cảm thầy rất tin tưởng và chuyên nghiệp nữa. The end introduction …

Bubble Sort: sắp xếp nổi bọt

Ý tưởng thuật toán: Đúng như tên gọi của nó những phần tử sẽ được bố trí theo kiểu phần tử nào nhỏ nhất sẽ nổi lên đầu còn các phần tử to sẽ chìm xuống cuối.

Code bubble sort:

Output:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Giải nghĩa đoạn code trên

tấn công số key cho mảng ở trên (chú ý hen, trong C thì những chỉ số là index nhưng mà trong PHP lại là key).

9 -> a[0]; 8 -> a[1]; 7-> a[2]; 6->a[3]; 5->a[4]; 4->a[5]; 3->a[6]; 2->a[7]; 1->a[8]; 0->a[9];

Ở vòng for đầu tiên với $i=0 sẽ thực hiện vòng lặp for thứ hai từ địa điểm thứ 9 xuống vị trí thứ 0 của mảng trên, và bắt đầu so sánh nếu số trước lớn hơn số sau thì thiến hai số đó. ví dụ giá trị của a[9] =0 và a[8] =1; rõ ràng a[8] =1 (số trước) > a[9]=0 (số sau). Thỏa mãn điều kiện if ở trên nên thực hiện hoạn hai số này và tiếp tục so sánh như vậy cho đến j=1; như vậy sau giá trị $i=0 và chạy vòng for thứ hai thì phần tử 0 tức là giái trị của a[9] sẽ được đẩy lên đầu. (phần tử nhẹ nhất nổi lên đầu.).Như vậy có thể hiểu ngay sau khi tăng $i lên một thì giá trị =1 trong mảng $a sẽ đứng kế sau giá trị 0 trong mảng $a.

Selection Sort: chọn lựa trực tiếp

Code selection sort

Output: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Ý tưởng thuật toán: xét một mảng cần sắp xếp ta sẽ chọn phần tử đầu tiêngiả sử nó là nhỏ xíu nhất, sau đó qua sử lí ta sẽ tìm ra phần tử nhỏ xíu nhất thực sự của mảng và hoán vị nó với phần tử vừa giá sử là nhỏ nhất.

các thao tác nhìn có vẻ na ná bubble sort nhưng mà nó có thêm biến $min, biến này nhằm mục đích lấy chỉ số (à quên key chứ )của phần tử ốm nhất mà ta vừa ví thử và xét đến điều kiện if ($b[$j] < $b[$min]) nếu đúng thì gán lại chỉ số tí hon nhất thực thụ của mảng cho biến $min. Và thực hiện thiến $a[$i] (là giá trị của biến min mà ta giả sử) cho$a[$min] (giá trị vừa tìm ra và nhỏ hơn giá trị của $a[$i]). Chỉ vậy thôi. Đó là Selection Sort

Insertion Sort: phương pháp chèn

Code for Insertion Sort.

Output: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

ý tưởng thuật toán: giảng giải rễ hiểu nhất cho thuật toán này là khi cả nhà chời bài tiến lên(ngoài băc mình hay gọi là chơi bài nam). cả nhà sẽ nhìn thầy một nhóm quân bài đã có thứ tự nhưng mà con bài tiếp theo lại không đúng với trật tự của nhóm quân bài này (ví dụ nhìn thầy 2 cơ, 3 cơ, 4 cơ A tiếp theo không phải 5 nhưng mà là K cơ. Trong khi đó 5 cơ lại ở đâu đó trong các quân bài cầm trên tay) nhiệm vụ của các bạn là nhìn lướt toàn bộ các quân bài có trên tay và lấy con 5 cơ đặt đúng địa điểm sau 4 cơ. Đó cũng chính là phương pháp mà insertion sort làm việc đó cả nhà.

giải thích code: Ở vòng lặp trước tiên khi xét $i=0, và thực hiện tất các câu lệnh ở dưới nó khi $i=0 ngay tức khắc là lấy giá trị của nó liền tức là tóm lấy $b[$i]; và so sánh nó với $b[$j]. cả nhà thấy nó ở trong điều kiện vòng lặp for thư hai && đó. Nếu đúng thì sẽthực hiện hoán vị $b[$j+1] = $b[$j]; Nếu ko thì chính nó là nhỏ xíu hơn số cần so sánh rồi, nó vẫn là chính nó thể hiện qua $b[$j+1]=$x; chỉ vậy thôi

Kết luận

Trong bài viết này tôi chỉ có thể public từng dó thôi, nếu cả nhà thích thiết lập them các thuật toán shellsort, radix sort, merg sort hay binary search thì phải comment(còm men) ở dưới hay một số đòi hỏi về lập trình PHP (chưa nói tới lập trình áp dụng nha bởi vì mình chưa có khả năng do mới xúc tiếp với PHP). Mình sẽ cố hết sức để viết. Do đây là bài viết đầu tiên nên rất cần dò xét nhã hứng của các thành viên. Mình thích khen lắm..hi hi hi. Rất vui khi được đóng góp cho izwebz.

Lưu ý: Trong những đoạn code trên tôi viết chỉ để mô phỏng những thuật toán trên thôi chưa tính tới chuyện tối ưu trong tính toán, tỉ dụ như bubble sort nếu viết như vậy thì các bạn sẽ được điểm kém khi học môn phân tíchthiết kế giải thuật, nó khong tối ưu về thời gian, rõ rang với code như vậy thì kể cả mảng đã sắp xếp rồi nó vẫn phải thực gần như ngần đó đoạn code sở dĩ sắp như và câu lệnh if đều không thỏa(vì nó đã bố trí rồi). và trong insertion sort cũng như vậy. các bạn có thể khám phá làm sao để tối ưu nhé, code các bạn sẽ public trên izwebz hen, nhớ thiết lập trên PHP. Đang ngồi trên thư viện trường rất thoải mái khi viết bài này. Chào tất cả cả nhà yêu izwebz . Good luck !!!!


Viewing all articles
Browse latest Browse all 1317

Trending Articles