读书人

求大神帮小弟我看看啊这个程序没错没

发布时间: 2013-03-16 11:51:46 作者: rapoo

求大神帮我看看啊,这个程序没错,没警告为什么不能运行啊?
#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, 这是为什么啊,求大神啊
[解决办法]
你这个没考虑有两个数相等的情况
[解决办法]

引用:
你这个没考虑有两个数相等的情况


改成下面应该可以
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;
}
[解决办法]
对于这组数据: 7 9 6 3 2 6 91 90 85 12, 按你的程序来跑,最终*left=*right=6, 然后将一直不满足a[left] <base或a[left] > base,从而陷入死循环,改为如下:
[code=c#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;
}[/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;
}

读书人网 >C语言

热点推荐