求大神帮我看看啊,这个程序没错,没警告为什么不能运行啊?
#include "stdio.h"
int Division(int a[], int left, int right)
{
int base = a[left];
while(left < right)
{
while(left < right && a[right] > base)
--right;
a[left] = a[right];
while(left < right && a[left] <base)
++left;
a[right] = a[left];
}
a[left] = base;
return left;
}
void QuickSort(int a[], int left, int right)
{
int i;
if(left < right)
{
i = Division(a, left, right);
QuickSort(a, left, i-1);
QuickSort(a, i+1,right);
}
}
int main(void)
{
int i, a[10];
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
QuickSort(a, 0, 9);
for(i=0; i<10; i++)
printf("%d ", a[i]);
return 0;
}
这个程序是快速排序, 但是不为什么有的数能运行,例如3 1 2 57 8 9 53 23 32 21
有的数就不能运行啊,例如7 9 6 3 2 6 91 90 85 12, 这是为什么啊,求大神啊
[解决办法]
你这个没考虑有两个数相等的情况
[解决办法]
while((left < right) && (a[left] <= base)) //>改为了>=
++left;
a[right] = a[left];
}
a[left] = base;
return left;
}
void QuickSort(int a[], int left, int right)
{
int i;
if(left < right)
{
i = Division(a, left, right);
QuickSort(a, left, i-1);
QuickSort(a, i+1,right);
}
}
int main(void)
{
int i, a[10];
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
QuickSort(a, 0, 9);
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}[/code]
[解决办法]
代码没粘好....
#include <stdio.h>
int Division(int a[], int left, int right)
{
int base = a[left];
while(left < right)
{
while((left < right) && (a[right] >= base)) //>改为了>=
--right;
a[left] = a[right];
while((left < right) && (a[left] <= base)) //>改为了>=
++left;
a[right] = a[left];
}
a[left] = base;
return left;
}
void QuickSort(int a[], int left, int right)
{
int i;
if(left < right)
{
i = Division(a, left, right);
QuickSort(a, left, i-1);
QuickSort(a, i+1,right);
}
}
int main(void)
{
int i, a[10];
for(i=0; i<10; i++)
scanf("%d", &a[i]);
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
QuickSort(a, 0, 9);
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}