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

Đề tài: Đệ quy vô tận? - Quick Sort

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

    Mặc định Đệ quy vô tận? - Quick Sort

    chỗ này nó báo là vòng lặp hay đệ quy vô tận, ai sửa giúp mình với...Viết bằng ngôn ngữ C#
    Code:
    void QuickSort(int left, int right)
            {
                if (left <= right)
                {
                    int x, p, q;
                    x = am[left];
                    p = left;
                    q = right;
                    while (p <= q)
                    {
                        while (am[p] < x)
                            p++;
                        while (am[q] > x)
                            q--;
                        if (p <= q)
                        {
                            changepos(t1, t2);
                            hoanvi(ref am[p], ref am[q]);
                            p++;
                            q--;
                        }
                    }
                    if (left < q)
                        QuickSort(left, q);
                    if (right < p)
                        QuickSort(p, right);
                }
            }
    =_________=!

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Sửa cho chạy:

    Code:
    void QuickSort(int left, int right)
            {
                if (left < right)
                {
                    int x, q;
                    x = am[left];
                    q = right;
                    while (left < q)
                	{
                		while(am[left]<x)
                			left++;
                         while (am[q] > x)
                            q--;
                        if (left <= q)
                        {
                            changepos(t1, t2);// ??
                            hoanvi(ref am[left], ref am[q]);
                            left++;
                            q--;
                        }
                    }
                    
                 	if(right>left)
    	             	QuickSort(left,right);
                }
            }
    mình nghĩ quicksort của cậu chưa đúng vì giải thuật cần phân hoạch mảng ra để sắp xếp trong khi code của cậu ko làm điều đó ( ko chọn phần tử ở giữa mà chọn ở luôn chọn đầu mảng)

    đây là quicksort với pivot ở giữa:
    C Code:
    1. void quicksort(int l,int r)
    2. {
    3.      if(l>=r) return;
    4.      int i=l;
    5.      int j=r;
    6.      int x=am[(l+r)/2];
    7.      while(i<=j)
    8.      {
    9.                 while(am[i]<x) i++;
    10.                 while(am[j]>x) j--;
    11.                 if(i<=j)
    12.                 {
    13.                         swap(am[i],am[j]);
    14.                         i++;j--;
    15.                 }
    16.      }
    17.      quicksort(l,j);
    18.      quicksort(i,r);
    19.      
    20. }
    code ra gió bão

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

    ah lúc đầu mình chọn ở giữa nhưng bị vậy nên chuyển lên đầu cũng bị ^^ với lại theo như mình được biết thì chọn phần tử nào không quan trọng, chọn ở giữa là cách thường được dùng nhất và tự nhiên nhất ^^ cảm ơn ý kiến của bạn
    =_________=!

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

  1. Thuật toán C++ Ưu nhược điểm các kiểu sort Interchange sort, Selection sort, Insertion sort, Sharke sort , Quick sort, Heap sort
    Gửi bởi duythanhnguyen trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 7
    Bài viết cuối: 23-09-2013, 01:16 AM
  2. sắp xếp Quick Sort và Shaker Sort nâng cao?
    Gửi bởi ngocnhannet trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 26-11-2010, 07:26 PM
  3. Quick sort
    Gửi bởi tinhyeuvietnam09 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 09-05-2010, 10:13 PM
  4. Quick sort-->sai ở đâu?
    Gửi bởi giangnk trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 23-12-2007, 03:45 PM
  5. Code Quick Sort không đệ qui viết bằng C??
    Gửi bởi darlong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 04-06-2007, 11:54 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