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

Đề tài: Help Me about HeapSort

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

    Mặc định Help Me about HeapSort

    Chạy các thuật toán sắp xếp trước đều ok , nhưng chỉ có heapsort viết mã hoàn chỉnh lại ... ko chạy . Các bro giúp với
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    struct sinhvien
    {
           long MaSV;
           char HoLot[20];
           char Ten[8];
           int NamSinh;
    };
    void nhapSV(struct sinhvien SV[],int &n)
    {
    	printf("Nhap so luong sinh vien");
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		printf("Nhap Ma Sinh vien %d : ",i+1);
    		scanf("%ld",&SV[i].MaSV);
    		printf("Nhap Ho lot : ");
    		fflush(stdin);
    		gets(SV[i].HoLot);
    		printf("Nhap ten : ");
    		fflush(stdin);
    		gets(SV[i].Ten);
    		printf("Nhap nam sinh : ");
    		scanf("%d",&SV[i].NamSinh);
    
    	}
    }
    void xuat(struct sinhvien SV[],int n)
    {
    	printf("\n****************************\n");
    	for(int i=0;i<n;i++)
    	{
    		printf("Ma sinh vien : %ld\n",SV[i].MaSV);
    		printf("Ho va ten: %s %s\n",SV[i].HoLot,SV[i].Ten);
    		printf("Nam sinh : %d\n",SV[i].NamSinh);
    	}
    }
    void swap(struct sinhvien &SV,struct sinhvien &SV1)
    {
    	struct sinhvien tam;
    	tam=SV;
    	SV=SV1;
    	SV1=tam;
    }
    void ICS(struct sinhvien SV[],int n)
    {
    	printf("\n****************************\n");
    	for(int i=0;i<n-1;i++)
    	    for(int j=i+1;j<n;j++)
    		if(SV[i].MaSV>SV[j].MaSV)
    			swap(SV[i],SV[j]);
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void BBS(struct sinhvien SV[],int n)
    {
    
    	printf("\n****************************\n");
    	for(int i=0;i<n;i++)
    	    for(int j=n-1;j>i;j--)
    		if(SV[i].MaSV>SV[j].MaSV)
    			swap(SV[i],SV[j]);
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void SS(struct sinhvien SV[],int n)
    {
    
    	printf("\n****************************\n");
    	for(int i=0;i<n;i++)
    	{
    		int min=i;
    	    for(int j=i+1;j<n;j++)
    		if(SV[j].MaSV<SV[min].MaSV)
    			min=j;
    	    if(SV[i].MaSV>SV[min].MaSV)
    		swap(SV[i],SV[j]);
    	}
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void IS(struct sinhvien SV[],int n)
    {
    
    	int chen;
    	printf("\n****************************\n");
    	for(int i=1;i<n;i++)
    	{
    		chen=SV[i].MaSV;
    	    for(int j=i;j>0&&chen<SV[j-1].MaSV;j--)
    		SV[j].MaSV=SV[j-1].MaSV;
    	    SV[j].MaSV=chen;
    	}
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void ShS(struct sinhvien SV[],int n)
    {
    
    	int l=0;
    	int r=n-1;
    	int k=r;
    	while(l<r)
    	{
    	for(int j=r;j>l;j--)
    		if(SV[j].MaSV<SV[j-1].MaSV)
    		{
    			swap(SV[j],SV[j-1]);
    			k=j;
    		}
    		l=k;
    	for(j=l;j<r;j++)
    		if(SV[j].MaSV>SV[j+1].MaSV)
    		{
    			swap(SV[j],SV[j+1]);
    			k=j;
    		}
    		r=k;
    	}
    
    	printf("\n****************************\n");
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void QS(struct sinhvien SV[],int l,int r)
    {
    	if(l>=r)
    	return;
    	int n;
    	int i=l;int j=r;
    	int x =SV[(l+r)/2].MaSV;
    	while(i<=j)
    	{
    		while(SV[i].MaSV<x) i++;
    		while(SV[j].MaSV>x) j--;
    		if(i<=j)
    		{
    			swap(SV[i],SV[j]);
    			i++;j--;
    		}
    	}
    	QS(SV,l,r);
    	QS(SV,i,r);
    	QS(SV,0,n-1);
    }
    
    void hieuChinh(struct sinhvien SV[],int l , int r)
    {
    	int x,i,j;
    	i=l ; j=2*i;
    	x=SV[i].MaSV;
    	while (j<=r)
    	{
    		if(j<r)
    			if(SV[j].MaSV<SV[j+1].MaSV)
    			j=j+1;
    		if(SV[j].MaSV<x) break;
    		else
    		{
    			SV[i].MaSV=SV[j].MaSV;
    			i=j;
    			j=2*i;
    			SV[i].MaSV=x;
    		}
    	}
    
    }
    void creatHeap(struct sinhvien SV[] , int n)
    {
    	int l;
    	l = n/2;
    	do
    	{
    		hieuChinh(SV,l,n);
    		l=l-1;
    	}
    	while(l>0);
    }
    
    void heapSort(struct sinhvien SV[],int n)
    {
    	int r;
    	creatHeap(SV,n);
    	r=n-1;
    	do
    	{
    		swap(SV[0],SV[r]);
    		r=r-1;
    		hieuChinh(SV,0,r);
    	}
    	while(r>0);
    	printf("\n****************************\n");
    	printf("Sap xep tang ma sinh vien\n");
    	xuat(SV,n);
    }
    void xuatMotSV(struct sinhvien SV[],int i)
    {
    		printf("Ma sinh vien :%ld\n",SV[i].MaSV);
    		printf("Ho va ten: %s %s\n",SV[i].HoLot,SV[i].Ten);
    		printf("Nam sinh :%d\n",SV[i].NamSinh);
    }
    void timKiem(struct sinhvien SV[],int n)
    {
    	printf("\n****************************\n");
    	long x;
    	int count=0;
    	printf("Nhap ma sinh vien muon tim : ");
    	scanf("%ld",&x);
    	for(int i=0;i<n;i++)
    		if(SV[i].MaSV==x)
    		{
    			xuatMotSV(SV,i);
    			count++;
    			break;
    		}
    	if(count==0)
    		printf("Khong tim thay !\n");
    }
    void timTen(struct sinhvien SV[],int n)
    {
    	printf("\n****************************\n");
    	char name[8];
    	printf("Nhap ten sinh vien muon tim : ");
    	fflush(stdin);
    	gets(name);
    	for(int i=0;i<n;i++)
    		if(strcmp(name,SV[i].Ten)==0)
    		{
    			xuatMotSV(SV,i);
    			break;
    		}
    	if(i==n-1)
    		printf("Khong tim thay !");
    }
    void inNamSinh(struct sinhvien SV[],int n)
    {
    	printf("\n****************************\n");
    	printf("In ra thong tin nguoi co nam sinh 1989\n");
    	for(int i=0;i<n;i++)
    	 if(SV[i].NamSinh==1989)
    		xuatMotSV(SV,i);
    }
    void main()
    {
    	clrscr();
    	int n,l,r;
    	struct sinhvien SV[100];
    	nhapSV(SV,n);
    	xuat(SV,n);
    	ICS(SV,n);
    	timKiem(SV,n);
    	timTen(SV,n);
    	inNamSinh(SV,n);
    	int chon;
    	printf("\nChon mot trong nhung thuat toan sau de sap xep : \n");
    	printf("1. Inter change Sort\n");
    	printf("2. Buble Sort\n");
    	printf("3. Selection Sort\n");
    	printf("4. Insert Sort\n");
    	printf("5. Shaker Sort\n");
    	printf("6. Qick sort\n");
    	printf("7. Heap Sort\n");
    	scanf("%d",&chon);
    	switch(chon)
    	{
    		case 1:ICS(SV,n); break;
    		case 2:BBS(SV,n); break;
    		case 3:SS(SV,n); break;
    		case 4:IS(SV,n); break;
    		case 5:ShS(SV,n); break;
    		case 6:QS(SV,l,r);
    		printf("\n****************************\n");
    		printf("Sap xep tang ma sinh vien\n");
    		xuat(SV,n); break;
    		case 7:heapSort(SV,n); break;
    		default : printf("Ban chon sai!"); break;
    	}
    
    	getch();
    }

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

    sao ko có ai giúp em cả vậy

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

  1. Thuật toán Heapsort có nhược điểm gì?...
    Gửi bởi MrChicKen_NAD trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 13-12-2016, 06:04 PM
  2. Thuật toán C++ thuật toán heapsort được thể hiện bằng đồ họa ntn?
    Gửi bởi tuananhcnt50 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 11-03-2012, 09:09 AM
  3. Kỹ thuật C Lập trình thuật toán heapsort bằng ngôn ngữ C?
    Gửi bởi hunterkhanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-01-2011, 10:34 AM
  4. Sắp xếp ShellSort, RadixSort, HeapSort, Mergee
    Gửi bởi v0va_1106 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 21-10-2010, 08:42 PM
  5. Xây dựng cây cho thuật toán heapsort
    Gửi bởi onlktvn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 06-06-2010, 06:43 PM

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