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

Đề tài: Giúp em debug thuật toán QuickSort

  1. #1
    Ngày gia nhập
    05 2008
    Bài viết
    0

    Mặc định Giúp em debug thuật toán QuickSort

    Em kiểm tra đi kiểm tra lại mà ko phát hiện được lỗi, cứ chạy là hiện ông error message của Win. Mong các anh chị giúp đỡ.
    Code:
    #include <iostream>
    using namespace std;
    void Partition(int A[], int i, int j, int k)
    {
         int l = i, r = j;
         while ((A[l] <= A[i]) && (l < j))
               l++;
         while (A[r] > A[i])
               r--;
         while (l < r)
         {
               swap(l,r);
               while ((A[l] <= A[i]) && (l < j))
                     l++;
               while (A[r] > A[i])
                     r--;
         }
         swap(A[i], A[r]);
         k = r;
    }
    void QuickSort(int A[], int i, int j)
    {
         int k;
         if (i < j)
         {
               Partition(A, i, j, k);
               QuickSort(A, i, k-1);
               QuickSort(A, k+1, j);
         }
    }
    int main()
    {
        int n;
        cout << "Nhap kich thuoc mang: ";
        cin >> n;
        int A[n];
        for (int i = 0; i < n; i++)
        {
            cout << "Nhap A[" << i << "] : ";
            cin >> A [i];
        }
        int k;
        QuickSort(A ,0, n - 1);
        for ( int i = 0; i < n; i++)
            cout << " A[" << i << "] = " << A[i] << endl;   
        system(" pause ");
    }

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Trích dẫn Nguyên bản được gửi bởi tivalat Xem bài viết
    Code:
    void Partition(int A[], int i, int j, int k)
    {
    ...
    }
    
    void QuickSort(int A[], int i, int j)
    {
         int k;
         if (i < j)
         {
               Partition(A, i, j, k);
               QuickSort(A, i, k-1);
               QuickSort(A, k+1, j);
         }
    }
    QuickSort(A,i,j) lấy giá trị k từ đâu ra mà dám gọi QuickSort(A,i,k-1) và QuickSort(A,k+1,j) ?

  3. #3
    Ngày gia nhập
    05 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi tivalat Xem bài viết
    Code:
    void QuickSort(int A[], int i, int j)
    {
         int k;
         if (i < j)
         {
               Partition(A, i, j, k);
               QuickSort(A, i, k-1);
               QuickSort(A, k+1, j);
         }
    }
    Em khai báo int k ở trên rồi mà?

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Trích dẫn Nguyên bản được gửi bởi tivalat Xem bài viết
    Em khai báo int k ở trên rồi mà?
    Khi khai báo thì k chỉ tồn tại chứ giá trị chưa xác định. Muốn nó xác định thì phải gán trị cho nó chứ.

  5. #5
    Ngày gia nhập
    05 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Khi khai báo thì k chỉ tồn tại chứ giá trị chưa xác định. Muốn nó xác định thì phải gán trị cho nó chứ.
    Giá trị k được xác định thông qua hàm Partition mà.
    Em cũng thử cho k một giá trị ( 0, 1, 2) nhưng vẫn lỗi vậy.
    Đã được chỉnh sửa lần cuối bởi tivalat : 25-05-2008 lúc 06:56 PM.

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Mặc định Giúp em debug thuật toán QuickSort

    Trích dẫn Nguyên bản được gửi bởi tivalat Xem bài viết
    Giá trị k được xác định thông qua hàm Partition mà.
    Đúng rồi, k đáng nhẽ ra phải được gán trị bởi Partition(A,i,j,k). Bây giờ bạn đọc lại khai báo của hàm Partition() (đoạn mà mình đã trích ra) xem nó có thể gán trị cho k hay không?


    Nếu vẫn chưa thấy vấn đề, bạn hãy thử chạy đoạn code này:

    Code:
    void testPartition()
    {
        int k = 1000000;
        int A[10] = {0,1,2,3,4,5,6,7,8,9};
        Partition(A, 0, 9, k);
        cout << k << endl;
    }
    Đã được chỉnh sửa lần cuối bởi Ada : 25-05-2008 lúc 07:14 PM.

Các đề tài tương tự

  1. Thuật toán QuickSort
    Gửi bởi yongie36 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 0
    Bài viết cuối: 05-09-2013, 09:13 PM
  2. Giúp em Viết thuật toán quicksort sử dụng pivot là phần tử đầu tiên.
    Gửi bởi anhhung121234 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 0
    Bài viết cuối: 13-11-2012, 08:38 PM
  3. Trả lời: 6
    Bài viết cuối: 04-05-2008, 08:04 AM
  4. Kỹ thuật cài đặt thuật toán heapsort và quicksort trên C?
    Gửi bởi Taylaptrinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 06-04-2008, 06:50 PM
  5. [VC++6] Giúp về thủ thuật debug?
    Gửi bởi minhson trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 9
    Bài viết cuối: 03-04-2007, 12:06 PM

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