首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求大神帮小弟我看看啊这个程序没错,没警告为什么不能运行啊

2013-03-16 
求大神帮我看看啊,这个程序没错,没警告为什么不能运行啊?#include stdio.hint Division(int a[], int le

求大神帮我看看啊,这个程序没错,没警告为什么不能运行啊?
#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;
}

热点排行