* Ý Tưởng cho bài toán : xuất phát từ phần 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 nó ta tiến hành đưa nó về bên trái của dãy bằng cách hoán vị 2 phần tử đó . 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 như trên ta thu được dãy tăng dần (giảm dần thì người lại <khác đoạn nhỏ hơn với lớn hơn >)
* VD như sau :
Mảng A= {8 , 6 , 34 , 22 , 11}
các bước thuật toán thực hiện như sau :
* code :
#include <iostream>
#define Max 100
using namespace std;
//nhập dữ liệu
void Nhap (int A[],int &n){
cout << "Nhap n : ";
cin >> n;
for (int i = 0; i<n; i++){
cout << "A["<< i <<"] = ";
cin >> A[i];
}
}
// hàm đổi giá trị của 2 phần tử
void Swap (int &A,int &B){
int temp = A;
A = B;
B = temp;
}
// thuật toán
void Bubble_Sort(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],A[j-1]);
}
}
}
// hiểu thị mảng
void Xuat (int A[],int n){
cout << " Mang dk sx lai nhu sau : ";
for (int i = 0; i<n; i++ ){
cout << A[i] << " ";
}
}
// MAIN
int main (){
int A[Max],n = 0;
Nhap (A,n);
Bubble_Sort(A,n);
Xuat (A,n);
system("pause");
return 0;
}
KQ :
#include <iostream>
#define Max 100
using namespace std;
//nhập dữ liệu
void Nhap (int A[],int &n){
cout << "Nhap n : ";
cin >> n;
for (int i = 0; i<n; i++){
cout << "A["<< i <<"] = ";
cin >> A[i];
}
}
// hàm đổi giá trị của 2 phần tử
void Swap (int &A,int &B){
int temp = A;
A = B;
B = temp;
}
// thuật toán
void Bubble_Sort(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],A[j-1]);
}
}
}
// hiểu thị mảng
void Xuat (int A[],int n){
cout << " Mang dk sx lai nhu sau : ";
for (int i = 0; i<n; i++ ){
cout << A[i] << " ";
}
}
// MAIN
int main (){
int A[Max],n = 0;
Nhap (A,n);
Bubble_Sort(A,n);
Xuat (A,n);
system("pause");
return 0;
}
KQ :
link file code : Tải Xuống
Nhận xét
Đăng nhận xét