Hiển thị kết quả từ 1 đến 4 / 4
  1. #1
    Tham gia
    01-01-2007
    Bài viết
    74
    Like
    0
    Thanked 0 Times in 0 Posts

    Cần chú ý ! Sắp xếp mảng bằng quicksort

    Mình đang viết chương trình để sắp xếp mảng bằng quicksort, khi chạy thử thì nó không có báo lỗi nhưng chương trình lại kô chạy ra gì cả. Mong mọi người giúp đỡ . Thanks

    Code:
    #include<stdio.h>      //khai bao thu vien
    #include<conio.h>
    #include<stdlib.h>
    #define MAX 10000
    char *input="day_so.inp";
    float a[MAX];
    int n;
    void qs(int l,int r)
    {
    	float tg;
    	float pivot;
    	int i,j;
    	if(l<r)
    	{
    		randomize();
    		i=l;
    		j=r;
    		pivot=a[random(r-l+1)+1];
    		do
    		{
    			while(a[i]<pivot)i++;
    			while(a[j]>pivot)j--;
    			if(i<=j)
    			{
    				tg=a[i];
    				a[i]=a[j];
    				a[j]=tg;
    				i++;
    				j--;
    			}
    		}
    		while(i<=j);
    		qs(l,j);
    		qs(l,r);
    	}
    }
    void main()
    {
    	clrscr();
    	int i;
    	FILE*f;
    	//doc du lieu tu FILE *//
    	f=fopen(input,"r");
    		fscanf(f,"%d",&n);
    		for(i=0;i<n;i++)
    		fscanf(f,"%f",&a[i]);
    	fclose(f);
    	qs(0,n-1);
    	//in ra ket qua//
    	printf("mang sau khi sap xep la:");
    	for(i=0;i<=n-1;i++)
    	printf("%f",a[i]);
    	getch();
    }
    Quote Quote

  2. #2
    Tham gia
    15-11-2008
    Bài viết
    10
    Like
    0
    Thanked 0 Times in 0 Posts
    //qs(l,r);
    phải là qs(i,r) chứ

  3. #3
    Tham gia
    11-09-2007
    Bài viết
    3
    Like
    0
    Thanked 0 Times in 0 Posts
    Mẹ !!! sai là cái chắc rồi.
    [CODE]
    ..............................................
    Procedure QuickSort(Var l,r:integer);
    Var pos: integer;
    Begin
    If l < r then
    Begin
    Pos:= Split(l,r);
    QuickSort(l,pos-1);
    QuickSort(pos+1,r);
    End;
    End;
    ...........................
    Procedure Split(Var low,high :integer);
    Var left,right :integer;item:datatype;
    Begin
    Item:=x[low];
    Left:=Low;
    Right:=high;
    While left <right do
    Begin
    While x[right]> item do
    Right:=right –1;
    While (left <right) and x[left]<=item)
    do
    Left:=left +1;
    If (left <right) then
    Permute (X[left],x[right])
    Pos:=Right;
    End;
    End;
    ....................................[CODE]
    Ông tự xem code này là hiểu thôi

  4. #4
    Tham gia
    21-12-2007
    Bài viết
    6
    Like
    0
    Thanked 0 Times in 0 Posts
    Bố khỉ,ông kia đang hỏi C ông này lôi ngôn ngữ khác vô thì biết sai chỗ nào mà sửa.

    [=========> Bổ sung bài viết <=========]

    Code:
    #include <stdio.h>
    #include <conio.h>
    #define MAX 100
    void swap(int *x,int *y)
    {
       int temp;
       temp = *x;
       *x = *y;
       *y = temp;
    }
    int getkeyposition(int i,int j )
    {
       return((i+j) /2);
    }
    void qsort(int list[],int m,int n)
    {
       int key,i,j,k;
       if( m < n)
       {
          k = getkeyposition(m,n);
          swap(&list[m],&list[k]);
          key = list[m];
          i = m+1;
          j = n;
          while(i <= j)
          {
             while((i <= n) && (list[i] <= key))
                    i++;
             while((j >= m) && (list[j] > key))
                    j--;
             if( i < j)
                    swap(&list[i],&list[j]);
          }
          swap(&list[m],&list[j]);
          qsort(list,m,j-1);
          qsort(list,j+1,n);
       }
    }
    void readlist(int list[],int n)
    {
       int i;
       printf("Nhap cac phan tu cho mang\n");
       for(i=0;i<n;i++)
           scanf("%d",&list[i]);
       fflush(stdin);
    }
    void printlist(int list[],int n)
    {
       int i;
       printf("Cac phan tu trong mang: \n");
       for(i=0;i<n;i++)
           printf("%d\t",list[i]);
       printf("\n");
    }
    
    void main()
    {
       int list[MAX], n;
       printf("Nhap so phan tu cho mang, lon nhat = 100\n");
       scanf("%d",&n);
       readlist(list,n);
       printf("Cac phan tu da nhap:\n");
       printlist(list,n);
       qsort(list,0,n-1);
       printf("\nCac phan tu da sap xep:\n");
       printlist(list,n);
       getch();
    }
    Được sửa bởi blue_ndt lúc 21:24 ngày 19-11-2008 Reason: Bổ sung bài viết

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •