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

Đề tài: Đếm sô phép gán và so sánh trong QuickSort

  1. #1
    Ngày gia nhập
    09 2009
    Nơi ở
    Hỏi để khủng bố hả?
    Bài viết
    224

    Angry Đếm sô phép gán và so sánh trong QuickSort

    Mình có đoạn code QuickSort sau đây:
    Visual C# Code:
    1. static void QuickSort(int[] a, int left, int right)
    2.         {
    3.            
    4.             if (left >= right)
    5.             {
    6.                 return;
    7.             }
    8.  
    9.             int x = a[(left + right) / 2]; // chọn phần tử giữa làm giá trị mốc
    10.             int i = left;
    11.             int j = right;
    12.  
    13.             while (i < j)
    14.             {
    15.                 while (a[i] < x)
    16.                 {
    17.                     i++;
    18.                 }
    19.  
    20.                 while (a[j] > x)
    21.                 {
    22.                     j--;
    23.                 }
    24.  
    25.                 if (i <= j)
    26.                 {
    27.                     Swap(ref a[i], ref a[j]);
    28.                     i++;
    29.                     j--;
    30.                 }
    31.             }
    32.  
    33.             QuickSort(a, left, j);
    34.             QuickSort(a, i, right);
    35.         }

    Mình muốn đếm số phép gán và so sánh trong phương thức trên. Vậy để làm điều đó thì mình cần thêm biến đếm như thế nào?
    Cám ơn các bạn đã đọc và hướng dẫn.
    Chỗ này dùng để ghi chữ ký

  2. #2
    Ngày gia nhập
    08 2011
    Bài viết
    117

    cho biến đếm thành biến toàn cục , chỗ nào muốn đếm thì tăng nó lên.

  3. #3
    Ngày gia nhập
    06 2010
    Nơi ở
    Hà Nội
    Bài viết
    31

    Hoặc là dùng biến tĩnh(static).
    Hô Hô

  4. #4
    Ngày gia nhập
    09 2009
    Nơi ở
    Hỏi để khủng bố hả?
    Bài viết
    224

    Trích dẫn Nguyên bản được gửi bởi CIMinuv Xem bài viết
    cho biến đếm thành biến toàn cục , chỗ nào muốn đếm thì tăng nó lên.
    Trích dẫn Nguyên bản được gửi bởi homanhduc Xem bài viết
    Hoặc là dùng biến tĩnh(static).
    Mọi người có thể nói rõ hơn không ạ.
    Chỗ này dùng để ghi chữ ký

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

    tớ nghĩ là bạn nên dùng một cờ boolean, khi biến nào đếm thì =true và sẽ tăng biến đếm.

  6. #6
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Mặc định Đếm sô phép gán và so sánh trong QuickSort

    Trích dẫn Nguyên bản được gửi bởi thuan199 Xem bài viết
    Mình có đoạn code QuickSort sau đây:
    Visual C# Code:
    1. static void QuickSort(int[] a, int left, int right)
    2.         {
    3.            
    4.             if (left >= right)
    5.             {
    6.                 return;
    7.             }
    8.  
    9.             int x = a[(left + right) / 2]; // chọn phần tử giữa làm giá trị mốc
    10.             int i = left;
    11.             int j = right;
    12.  
    13.             while (i < j)
    14.             {
    15.                 while (a[i] < x)
    16.                 {
    17.                     i++;
    18.                 }
    19.  
    20.                 while (a[j] > x)
    21.                 {
    22.                     j--;
    23.                 }
    24.  
    25.                 if (i <= j)
    26.                 {
    27.                     Swap(ref a[i], ref a[j]);
    28.                     i++;
    29.                     j--;
    30.                 }
    31.             }
    32.  
    33.             QuickSort(a, left, j);
    34.             QuickSort(a, i, right);
    35.         }

    Mình muốn đếm số phép gán và so sánh trong phương thức trên. Vậy để làm điều đó thì mình cần thêm biến đếm như thế nào?
    Cám ơn các bạn đã đọc và hướng dẫn.
    Cái này có vẻ thú vị phết nhỉ. Thuật toán nè lại đệ quy nữa. Dùng biến toàn cục là chuẩn rồi. Tuy nhiên, bên trong cái thuật toán đó dùng nhiều While nên đặt biến để đếm cái phép so sánh khá mệt. Hơn nữa còn cái Swap() cũng mất 3 phép gán, i++,j-- cũng đều là phép gán cả. Để xử cái while theo tớ bạn đặt biến đếm thế này:
    ......
    dem++;
    while(i<j)
    {
    ... dem++;
    }
    Đó là đếm số phép so sánh trong cái while thui, còn các phép gán, ss ở trong nó thi phải đếm tiếp.hihi. Mình chỉ góp ý thế thui. Mà sao lại đi đếm cái đó làm gì vậy bạn? mình hơi tò mò
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

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

  1. Sắp xếp quicksort khử đệ quy trong lập trình C
    Gửi bởi neverland87 trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 09-05-2012, 01:32 AM
  2. Lập trình C Dãy số 9 2 4 10 12 1 5 3 8 11, nhờ ae giải bằng Sắp xếp nhanh, QuickSort trong C
    Gửi bởi phongchuoi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 20-04-2011, 11:47 PM
  3. Rắc rối trong cài đặt Quicksort
    Gửi bởi huyson trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 24-03-2010, 11:05 PM
  4. Thuật toán QuickSort trong lập trình C
    Gửi bởi playboy trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 15-10-2008, 10:41 PM
  5. Trả lời: 6
    Bài viết cuối: 04-05-2008, 08:04 AM

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