khai dai nhan







phần mềm hỗ trợđổi tone onlinecảm âm sáobẩn bựa hội

CHÀO MỪNG ĐẾN VỚI WAP,
MÌNH LÀ" BẨN BỰA BOY" CÁC BẠN LÊN YOUTUBE TÌM MÌNH VỚI TỪ KHOÁ "BẨN BỰA BOY" HOẶC CLICK VÀO
nhớ supcribe kênh của mình nha , mình sẽ liên tục cập nhật những beat sáo c5 và những bản sáo hay nhất cho các bạn
fanpage: cảm âm sáo trúc vũ gia
mua sáo trúc liên hệ : 01635618531

Bài 13: Thuật toán sắp xếp nổi bọt trong php

Sắp xếp là một công việc rất quan trọng trong việc quản lý dữ liệu, nó giúp chúng ta tìm kiếm thông tin một cách nhanh chóng. Nên trong bài này chúng ta sẽ nghiên cứu một thuật toán sắp xếp đơn giản nhất đó là thuật toán sắp xếp nổi bọt(bubble sort)

Ý tưởng của thuật toán bắt nguồn từ việc so sánh 2 phần tử cạnh nhau và hoán vị chúng nếu không đúng vị trí. Ta có thể tiến hành từ trái qua phải hoặc từ phải qua trái tùy vào nhu cầu của mình.

Note: Để tiện việc giảng giải tôi gọi $n là tổng số phần tử của mảng, 1 là vị trí phần tử đầu tiên của mảng (trong mảng bắt đầu từ 0 nhưng tôi gắn nó bằng 1 để dễ dung hơn)

Sắp xếp nổi bọt tăng dần

Thuật toán sắp xếp nổi bọt tăng dần được xử lý như sau:

Cho vòng lặp $i chạy từ  1 tới ($n-1):

Lần lặp 1: $i = 1, lần lược so sánh với các vị trí khác bắt đầu từ ($i + 1) tức là vị trí 2,  nếu phần tử thứ 1 lớn hơn các phần tử đứng sau bắt đầu từ 2 thì hoán vị chúng.

Lần lặp 2: $i = 2, lần lược so sánh với các vị trí khác bắt đầu từ ($i + 1) tức là vị trí 3, nếu phần tử thứ 2 lớn hơn các phần tử  đứng sau nó bắt đầu từ 3 thì hoán vụ chúng.

Cứ như vậy cho đến khi ta lặp lần thứ ($n – 1), lúc này biến $i = ($n-1), ta so sánh với phần tử cuối cùng ($n) và hoán vị nếu không thỏa mãn.

Ví Dụ: Cho mảng sau: $mang = array(1, 5, 9, 2, 4, 9), hãy dùng thuật toán sắp xếp nổi bọt để sắp xếp mảng theo thứ tự tăng dần.

Mảng này có 6 phần tử bắt đầu từ 0 -> 5. Vì thế ta có bài giải như sau:

$mang = array(1, 5, 9, 2, 4, 9); // mảng theo đề bài
 
$sophantu = 5; // hoặc dùng hàm $sophantu = count($mang);
 
// Sắp xếp mảng
for ($i = 0; $i <= ($sophantu - 1); $i++)
{
    for ($j = $i + 1; $j <= $sophantu; $j++) // lặp các phần tử phía sau
    {
        if ($mang[$i] > $mang[$j]) // nếu phần tử $i bé hơn phần tử phía sau
        {
            // hoán vị
            $tmp = $mang[$j];
            $mang[$j] = $mang[$i];
            $mang[$i] = $tmp;
        }
    }
}
 
// Hiển thị các phần tử của mảng đã sắp xếp
for ($i = 0; $i < $sophantu; $i++){
    echo $mang[$i] . ' ';
}
Trong bài này ta sử dụng vòng lặp for lồng nhau để duyệt các phần tử. Với mỗi vòng lặp $i, ta sẽ dùng vòng lặp $j để duyệt từ vị trí tiếp ($i + 1) theo đến cuối mảng, nếu không đúng vị trí thì thực hiện đổi vị trí cho nhau.

Có lẽ các bạn không hiểu ở chỗ hoán vị. tại sao lại có một biến $tmp? Các bạn thử suy nghĩ giả sử bạn đang ôm một cái bao khá năng nên bạn phải ôm 2 tay, và Bố của bạn đang ôm một cái ghế cũng khá nặng và đương nhiên cũng phải ôm 2 tay. Giờ bạn muốn đổi 2 món đồ vật này tức là bạn sẽ đưa cái bao cho Bố bạn và Bố bạn đưa cái ghế cho bạn.  Giờ làm sao để đổi đây? giải pháp là nhờ một người trung gian giữ hộ cái bao cho bạn, rồi bố bạn đưa cái ghế cho bạn, sau đó bố bạn lấy cái bao từ người trung gian ấy. Từ đó suy ra trong đoạn code hoán vị mình đã dùng biến $tmp để làm biến trung gian lưu trữ.

Sắp xếp nổi bọt giảm dần

Thuật toán sắp xếp nổi bọt giảm dần thì ý tưởng cũng tương tự như so sánh tăng dần, chỉ có khác khi so sánh 2 phần tử với nhau thì nếu phần tử thứ $i bé hơn phần tử ($i + 1) thì hoán vị 2 vị trí đó. Với ví dụ trên ta có bài giải như sau:

$mang = array(1, 5, 9, 2, 4, 9); // mảng theo đề bài
 
$sophantu = 5; // hoặc dùng hàm $sophantu = count($mang);
 
// Sắp xếp mảng
for ($i = 0; $i <= ($sophantu - 1); $i++)
{
    for ($j = $i + 1; $j <= $sophantu; $j++) // lặp các phần tử phía sau
    {
        if ($mang[$i] < $mang[$j]) // nếu phần tử $i bé hơn phần tử phía sau
        {
            // hoán vị
            $tmp = $mang[$j];
            $mang[$j] = $mang[$i];
            $mang[$i] = $tmp;
        }
    }
}
 
// Hiển thị các phần tử của mảng đã sắp xếp
for ($i = 0; $i < $sophantu; $i++){
    echo $mang[$i] . ' ';
}

Đưa thuật toán sắp xếp nổi bọt vào hàm

Tôi có thắc mắc là tại sao chúng ta lại code một cách không chuyên nghiệp gì hết vậy trong khi chúng ta đã học bài xây dựng hàm trong php . Giờ chúng ta đưa nó vào hàm nhé:
 

// Ham sắp xếp
function sap_xep_tang($mang)
{
    $sophantu = count($mang);
    // Sắp xếp mảng
    for ($i = 0; $i <= ($sophantu - 1); $i++)
    {
        for ($j = $i + 1; $j <= $sophantu; $i++)
        {
            if ($mang[$i] > $mang[$j])
            {
                // hoán vị
                $tmp = $mang[$j];
                $mang[$j] = $mang[$i];
                $mang[$i] = $tmp;
            }
        }
    }
    return $mang;
}
 
// Hàm xuất ra màn hình
function xuat_mang_ra_man_hinh($mang)
{
    $sophantu = count($mang);
    for ($i = 0; $i < $sophantu; $i++){
        echo $mang[$i] . ' ';
    }
}
 
//--------------------------------------------------
// Chương trình chính
$mang = array(1, 5, 9, 2, 4, 9); // mảng theo đề bài
 
// sắp xếp
$mang = sap_xep_tang($mang);
 
// xuất ra màn hình
xuat_mang_ra_man_hinh($mang);

Kết Thúc Bài Học

Thuật toán sắp xếp nổi bọt trong php đơn giản và dễ cài đặt, vì thế nó được sử dụng rât rộng rãi trong các chương trình. Ở bài học tiếp theo chúng ta sẽ tìm hiểu thuật toán tìm kiếm tuyến tính trong php.

Nguồn: http://freetuts.net/thuat-toan-sap-xep-noi-bot-trong-php-13.html
Nguyễn Văn Cường
Nguyễn Văn Cường

Với sở thích viết tuts để học hỏi và chia sẽ kiến thức nên từng tham gia viết ở nhiều diễn đàn. Có thể code cả ngày mà quên ăn, đến lúc nhớ ra thì 2,3 tô không nhằm nhò gì. 25 tuổi có MỘT vợ MỘT con nên được gọi là tuổi trẻ tài cao =]]

Bạn có thể đăng câu hỏi cho bài viết tại trang hỏi đáp

game mien phi

số lượng khách truy cập
66
Tags :
cong dong a7 tlhp
Chào mừng tới ruolua.wap.sh -ruồi lửa

Old school Easter eggs.