Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
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;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  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ông cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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