Quantcast
Channel: Dạy Nhau Học - Latest topics
Viewing all articles
Browse latest Browse all 34346

Code thuật toán sắp xếp nổi bọt bị sai

$
0
0

@Tran_Hai_Anh wrote:

Thay đổi thuật toán nổi bọt nên giờ nó lại sắp xếp sai số 0. (chiều hướng tăng dần)
Ngồi tìm mãi ko hiểu nhầm chỗ nào, mời các chuyên gia vào trợ giúp. Trước có bác chỉ dấu == thì fix ok rồi

#include<iostream>

using namespace std;

int kiemtraTt(int s,int n,int a[30]){
    for(int i=0;i<n;i++){
        if(s==a[i]){
            return i;
            break;
        }
    }
    return 0;
}

bool kiemtraSo(int s, int t, int c[30]){
    for(int i=t-1;i>=0;i--){
        if(s==c[i]){
            return false;
            break;
        }
    }
    return true;
}

int dem(int t,int n,int a[20]){
    int k=0;
    for (int i=0;i<n;i++){
        if(a[i]==t){
            k++;
        }
    }
    return k;
}

int main(){
    int n;
    cin >> n;
    int a[30];
    int b[30];
    for(int i=0;i<n;i++){
        cin >> a[i];
    }

    for(int i=0;i<n;i++){
        b[i]=dem(a[i],n,a);
    }

    int c[30];
    c[0]=a[0];
    int t=1;
    
//kiểm tra lặp và đưa ra mảng mới không trùng lặp
    for(int i=1;i<n;i++){
        bool kiemtra=kiemtraSo(a[i],t,c);
        if(kiemtra==true){
            c[t]=a[i];
            t++;
        }
    }


    // sắp xếp phần tử của mảng mới

     for(int i=0;i<t-1;i++){
       for(int j=0; j<t-i-1;i++){
           if(c[j]>c[j+1]){
                 int tam = c[j];
                 c[j] = c[j+1];
                 c[j+1] = tam;
              }
          }
     }


    int d[t];

// tạo mảng ghi dữ liệu lặp theo thứ tự của mảng mới 
    for(int i=0;i<t;i++){
        int kiemtra2=kiemtraTt(c[i],n,a);
            d[i]=b[kiemtra2];
    }

    for(int i=0;i<t;i++){
        cout << c[i] << " - " << d[i] <<"; ";
    }
    return 0;
}

Untitled

(số - lần lặp)
kết quả đúng: 0 - 1; 1 - 1; 4 - 2

Posts: 2

Participants: 2

Read full topic


Viewing all articles
Browse latest Browse all 34346

Trending Articles