PDA

View Full Version : Code quicksort viết bằng C. Sai ở chỗ nào?



trantuannghia
31-08-2011, 04:37 PM
Em đang tập viết code sắp xếp.
Hôm nay học đến quicksort mà sao em code mãi vẫn không được.
Đây là code của em, mong mọi người tìm hộ chỗ sai:

#include <stdio.h>
int k[101];
void partition(int l,int h)
{
int x,i,j,m;
x=k[(l+h)/2];
i=l;j=h;
while(i<=j)
{
while(k[i]<x) i++;
while(k[j]>x) j--;
if(i<=j)
{
if(i<j)
{
m=k[i];k[i]=k[j];k[j]=m;
}
i++;j--;
}
}
partition(l,j);partition(i,h);
}
main()
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&k[i]);
partition(1,n);
for(i=1;i<=n;i++) printf("%d ",k[i]);
}

hunterkhanh
31-08-2011, 04:53 PM
mình hỏi này có phải sau khi chạy chương trình nó in ra đúng dãy ban đầu mà bạn nhập vào ko?tức là nó chưa đc sắp xếp ý!

stupid_genius
31-08-2011, 05:03 PM
if(l<j)partition(l,j);
if(i<h)partition(i,h);

hungphong10tin
31-08-2011, 05:05 PM
lý do là bạn chưa bỏ qua trường hợp l>=h (đầu>cuối thì sao mà sắp xếp đc???)

trantuannghia
31-08-2011, 05:56 PM
Cám ơn, mình đã sửa được rồi