PS:nhầm cái tiêu đề: tiêu đề phải sửa Quick sort thành merge sort
BÀi này nó không chạy theo đáp án yêu cầu của đề bài
lỗi: kết quả xuất ra màn hình không theo thứ tự tăng dần
abc.png
BÀi này nó không chạy theo đáp án yêu cầu của đề bài
Code:
#include<stdio.h> #include<conio.h> int b[100],c[100]; void nhapmang( int a[], int n) { int i; for (i=0; i<n;i++) { printf("\nNhap ptu thu %d:", i); scanf("%d",&a[i]); } } // xuat mang void xuatmang( int a[], int n) { int i; for (i=0; i<n;i++) printf("%3d", a[i]); printf("\n"); } int minhaiso(int a,int b) { if(a>b) return b; else return a; } void merge(int a[],int nb,int nc,int b[],int c[],int k) { int pb=0,pc=0,p=0,ib=0,ic=0,kb,kc; while((0<nb)&&(0<nc)) { kb=minhaiso(k,nb); kc=minhaiso(k,nc); if(b[pb+ib]<=c[pc+ic]) { a[p++]=b[pb+ib]; ib++; if(ib==kb) { for(;ic<kc;ic++) a[p++]=c[pc+ic]; nb-=kb;nc=-kc; ib=0,ic=0 ; pb+=kb; pc+=kc; } } else { a[p++]=c[pc+ic]; ic++; if(ic==kc) { for(;ib<kb;ib++) a[p++]=b[pb+ib]; ib=0,ic=0; nb-=kb,nc-=kc; pb+=kb; pc+=kc; } } } } void mergesort(int a[],int n) { int b[20],c[20]; int p,pb,pc; int i,k=1; do { p=0,pb=0,pc=0; while(p<n) { for(i=0;(p<n)&&(i<k);i++) b[pb++]=a[p++]; for(i=0;(p<n)&&(i<k);i++) c[pc++]=a[p++]; } // merge( a,pb,pc,b,c,k); merge(a,pc,pb,c,b,k); k=k*2; }while(k<n); } int main() { int b[100],c[100]; int a[20]; int n=10; nhapmang(a,n); xuatmang(a,n); mergesort(a,n); printf("\nDa sap xong:"); xuatmang(a,n); getch(); }
abc.png
Comment