Version 2 của thuật toán sắp xếp chọn

Thảo luận trong 'C/C++' bắt đầu bởi LieuKyThien, 15 Tháng mười một 2009.

  1. Offline

    LieuKyThien

    • Thành Viên Mới

    Số bài viết:
    79
    Đã được thích:
    49
    Điểm thành tích:
    0
    Cải tiến này dựa trên ý tưởng của Lâm Nhân lớp LT02b. He he nếu có vi phạm bản quyền thì cho mình sr nha.
    PS: với lại bài này vẫn còn nhiều chỗ chưa được tối ưu nên mong các bạn đóng góp thêm ý kiến để thuật toán hoàn thiện
    Mã:
    #include<stdio.h>
    #include<conio.h>
    
    void in(int a[40],int n)
    {
    	printf("\n");
    	for(int i=1;i<=n;i++)
    		printf("%3d",a[i]);
    }
    void main()
    {
    	clrscr();
    	int a[40],n,i,j,k,m,temp,x,max,min,temp2;
    	scanf("%d",&n);	
    	for(i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    	in(a,n);
    	printf("\nSau khi sap xep:\n");
    	temp2=temp3=n;
    	for(i=1;i<=n/2;i++)
    	 {
    		max=min=a[i];
    		k=m=i;
    		for(j=i+1;j<=temp2;j++)
    		 {
    			if(max<a[j])
    			 {
    				max=a[j];
    				k=j;
    			 }
    			if(a[j]<min)
    			 {
    				min=a[j];
    				m=j;
    			 }
    		 }
    		if(a[i]==max&&a[temp2]==min)
    		 {
    			a[i]=min;
    			a[temp2]=max;
    		 }
    		else
    		if(a[i]==max&&a[temp2]!=min)
    		 {
    			a[i]=a[temp2];
    			a[temp2]=max;
    			a[m]=a[i];
    			a[i]=min;
    		 }
    		else
    		 {
    			a[m]=a[i];
    			a[i]=min;
    			a[k]=a[temp2];
    			a[temp2]=max;
    		 }
    		temp2--;
    	 }
    	if(a[i]>a[i+1])
    	 {
    		temp=a[i];
    		a[i]=a[i+1];
    		a[i+1]=temp;
    	 }
    	in(a,n);
    	getch();
    }
    oliver_phonuiChiefree thích bài này.
  2. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    dài dòng quá ,hok tối ưu rồi

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí