Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: CTDL & Giải thuật dùng để làm gì ?

  1. #1
    Ngày gia nhập
    08 2017
    Bài viết
    2,552

    Mặc định CTDL & Giải thuật dùng để làm gì ?

    Đọc topic
    code bị lỗi không chạy được (...)
    làm gợi lại khúc mắc bấy lâu nay : CTDL & Giải thuật dùng để làm gì ?

    Bạn có thể giúp tôi, những người như tôi ? Tôi đã tốn nhiều thời gian - nhiều năm - học nó mà chưa có dịp sử dụng, chẳng biết dụng vào chỗ nào.

    CTDL & Giải thuật dùng để làm gì !

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    902

    Các phân tích của Monre về giải thuật là rất rõ ràng có cả đệ quy lẫn vòng lặp. Có ý nhỏ muốn trao đổi thêm.
    Theo như tôi thấy, cách dùng mảng trong main của bạn hơi gượng ép, dù MinGW hay Embarcadero chấp nhận khai báo mảng với số phần tử là biến, nhưng để phổ thông hơn sao bạn không dùng con trỏ hay <vector> nhỉ, mất thêm dòng lệnh nhưng rõ ràng hơn.
    C++ Code:
    1. int main(){
    2.     int i = 0, n;  
    3.     cout << "Nhap so phan tu: "; cin>> n;
    4.     // int a[n]; //biên dịch với MinGW hoặc Embarcadero
    5.     int * a = new int[n]; // mã theo C++
    6.  
    7.     nhap(n, a);
    8.     selectionsort(a, n, i);
    9.     xuat(n, a);
    10.     //
    11.     delete[] a; // Dùng xong
    12.     return 0;
    13. }

  3. #3
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    427

    Trích dẫn Nguyên bản được gửi bởi Monre Xem bài viết
    Tham khảo:
    http://diendan.congdongcviet.com/threads/t407322::nho-cac-su-huynh-chi-em-cho-sai-bai-selection-sort-de-quy.cpp

    C++ Code:
    1. #define used_HQ
    2.  
    3. #include<iostream>
    4. using namespace std;
    5.  
    6. void nhap( int n, int a[]){
    7.     for(int i = 0; i < n; i++){
    8.         cout<< "Nhap phan tu thu ["<< i <<"]: "; cin>> a[i];
    9.     }
    10. }
    11. void xuat( int n, int a[]){
    12.     for(int i = 0; i < n; i++)
    13.         cout<< a[i]<<" ";
    14.     cout<< endl;
    15. }
    16.  
    17. void selectionsort( int a[], int n, int i){
    18. #ifdef used_HQ 
    19.     //cout<< "Hoi quy!\n";
    20.     if(i == n - 1) return;
    21.    
    22.     int min = a[i]; //min
    23.     for(int j = i + 1; j < n; j++){
    24.         if(a[j] < min){
    25.             min = a[j];
    26.             swap(a[j], a[i]);
    27.         }
    28.     }          
    29.     selectionsort(a, n, i + 1);
    30. #else
    31.     //cout<< "Loop - for!\n";
    32.     for (i = 0; i < n - 1; i++) {
    33.         int min = a[i]; //min
    34.         for (int j = i + 1; j < n; j++)
    35.             if (a[j] < min) {
    36.                 min = a[j];            
    37.                 swap(a[j], a[i]);
    38.             }
    39.     }                    
    40. #endif
    41. }
    42.  
    43. int main(){
    44.     int i = 0, n;  
    45.     cout << "Nhap so phan tu: "; cin>> n;
    46.     int a[n]; //biên dịch với MinGW hoặc Embarcadero
    47.  
    48.     nhap(n, a);
    49.     selectionsort(a, n, i);
    50.     xuat(n, a);
    51.     //
    52.     return 0;
    53. }

    Xem thêm - có tiếng Việt:
    https://en.wikipedia.org/wiki/Selection_sort
    code trên chưa tối ưu, với mỗi i nó swap tới mấy lần trong khi chỉ cần swap 1 lần

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn