Chuyển đến nội dung chính

[ Sort ] Thuật toán Bubble-Sort [Code C++]

Thuật toán Bubble-Sort

Ý tưởng thuật toán: 
 - Xuất phát từ phần tử cuối danh sách ta tiến hành so sánh với phần tử bên trái của nó.
 - Nếu phần tử đang xét có khóa nhỏ hơn phần tử bên trái của nó ta tiến đưa nó về bên trái của dãy bằng cách hoán vị với phần tử bên trái của nó.
 - Tiếp tục thực hiện như thế đối với bài toán có n phần tử thì sau n – 1 bước ta thu được danh
sách tăng dần.

Ví dụ: sử dụng thuật toán Bubble Sort sắp xếp dãy số {3, 10, 4, 6, 2, 6, 15, 3, 9,7} theo thứ tự tăng dần.


Sau 9 bước lặp ta thu được dãy đã được sắp xếp: {2, 3, 3, 4, 6, 6, 7, 9, 10, 15}.

Cài đặt thuật toán:
[ Code Turbo C++]

#include <iostream.h>
#include <conio.h>
#define max 100
//nhap day
void NhapDay(int a[],int n) {
  for(int i=0; i<n; i++) {
   cout<<"\n a["<<i<<"] =";
   cin>>a[i];
  }
}
//xuat day
void XuatDay(int a[],int n) {
  cout<<"\n IN DAY: ";
  for(int i=0; i<n; i++)
cout<<a[i]<<"\t";
}
//hoan vi 2 phan tu
void Swap(int &a,int &b) {
  int t = a;
  a = b;
  b = t;
}
//sap xep cac phan tu
void BubbleSort(int a[],int n) {
  for(int i = 0; i < n-1; i++)
    for(int j = n-1; j > i; j--)
      if(a[j]<a[j-1])
        Swap(a[j-1],a[j]);
}
//chuong trinh chinh
void main() {
 int a[max],n;
 clrscr();
 cout<<"\n Nhap so phan tu:";
 cin>>n;
 NhapDay(a,n);

  XuatDay(a,n);
  cout<<"\n Sap xep Bubble-Sort: \n";
  BubbleSort(a,n);
  cout<<"\n Day vua sap xep la:";
  XuatDay(a,n);
  getch();
}
// Đề nghị độc giả chuyển code trên sang các ngôn ngữ lập trình khác


--------------------------------------------
Xem thêm các thuật toán khác: 

BÀI ĐỌC NHIỀU

[Java] Hướng dẫn lập trình Java với NetBean [Clip hướng dẫn]

[Đồ họa trong C\C++] Sử dụng các hàm đồ họa thông dụng trong C\C++ [C\C++]

[ C++ ] Tính đa hình, phương thức ảo, lớp trừu tượng trong C++ [Lập trình hướng đối tượng với C++]

[ Sort ] Thuật toán Heap-Sort [Code C++]

[Algorithm] Thuật toán Đệ quy và một số bài toán Đệ quy cơ bản

[Assembly] Tính tổng 2 số nguyên nhỏ hơn 10 [Lập trình hợp ngữ]

[Assembly] Hướng dẫn sử dụng Emu8086 [Lập trình hợp ngữ]

Bài tập +đáp án Lý thuyết đồ họa máy tính

[Thuật toán đồ thị / code C++] Thuật toán Dijkstra tìm đường đi ngắn nhất trên đồ thị G

[ C++ ] Kế thừa trong C++ [Lập trình hướng đối tượng với C++]