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

Đề tài: Quick sort-->sai ở đâu?

  1. #1
    Ngày gia nhập
    12 2007
    Nơi ở
    Hanoi
    Bài viết
    3

    Question Quick sort-->sai ở đâu?

    Anh em cùng xem thử nhé:
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #define max 1000
    
    void quick_sort(int a[],int left,int right);
    int partition(int a[],int left, int right);
    
    int main()
    {
      int a[max],n,i;
      printf("nhap vao so phan tu cua day: ");scanf("%d",&n);
      printf("lan luot nhap vao cac phan tu cua day: \n");
      for(i=1;i<=n;i++)  { printf("a[%d]=",i);scanf("%d",&a[i]); }
      quick_sort(a,1,n);
      printf("day sau khi sap xep la: \n");
      for(i=1;i<=n;i++)  printf("%d  ",a[i]);
      return 0;
    
    }
    
    void quick_sort(int a[],int left,int right)
    {
    int jpivot;
    if(left<right)
      {
    	 jpivot=partition(a,left,right);//jpivot chua vi tri cua pivot
    	if(left<jpivot) quick_sort(a,left,jpivot-1);
    	 if(jpivot<right) quick_sort(a,jpivot+1,right);
      }
    }
    
    int partition(int a[],int left, int right)
    {
     int i,j,pivot,temp;
     i=left;j=right;pivot=a[(i+j)/2];
     while(i<j)
    	{
    	  while(a[i]<pivot) i++;
    	 while(pivot<a[j]) j--;
    	 if(i<=j) {
    				  temp=a[i];a[i]=a[j];a[j]=temp;i++;j--;
    			 }
    	}
    return j;
    }

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    47

    Code:
    void quick_sort(int a[], int left, int right){
        int x = a[(left + right) / 2];
    	int i = left;
    	int j = right;
    	do {
    		while (a[i] < x) i ++;
    		while (a[j] > x) j --;
    		if (i <= j){
    			int temp = a[i];
    			a[i] = a[j];
    			a[j] = temp;
    			i ++;
    			j --;
    		}
    	} while(i <= j);
    	if (j > left) quick_sort(a, left, j);
    	if (i < right) quick_sort(a, i, right);
    }
    Bạn thay đoạn code này xem.

    Code của bạn sai ở dòng if(jpivot<right) quick_sort(a,jpivot+1,right);
    Cái right bạn phải so sánh với i chứ không phải với j.

  3. #3
    Ngày gia nhập
    12 2007
    Nơi ở
    Hanoi
    Bài viết
    3

    chân thành cảm ơn bạn nha, đúng là phải so sánh "right" với "i" và "left" với "j" thật.
    còn đối với chọn phần tử chốt ở đầu, cuối, hay ở 1 vị trí khác chắc cũng tương tự như vậy nhỉ.Để mình code thử xem.
    Thanks lots

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. Đệ quy vô tận? - Quick Sort
    Gửi bởi exdragonk trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 02-03-2009, 08:11 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