-1
#include <stdio.h>
#include <conio.h>

int *qs(int*,int,int);
int partition(int*,int,int);

void main()
{
    int arr[]={60,65,70,75,80,55,50,45,40};
    int p=0,q=8;
    int *sa;
    clrscr();
    sa=qs(arr,p,q);
    printf("\n After applying quick sort the array will be::\n");
    while(p<=q)
    {
        printf(" %d",*sa);
        sa++;
        p++;
    }
    getch();
}

int *qs(int *arr,int p,int q)
{
    int pos;
    if(p==q)
    {
        return(arr);
    }
    else
    {
        pos=partition(arr,p,q);
        qs(arr,p,pos-1);
        qs(arr,pos+1,q);
        return(arr);
    }
}

int partition(int *arr,int p,int q)
{
    int x,i,j,temp;
    x=arr[p];
    i=p;
    for(j=p+1;j<=q;j++)
    {
        if(arr[j]<=x)
        {
            i=i+1;
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    }
    temp=arr[i];
    arr[i]=arr[p];
    arr[p]=temp;
    return i;
}

このプログラムは、分割統治アルゴリズムを使用したクイック ソート用です。Turbo C++ 3.0 を使用してこのコードをコンパイルしている間、エラー メッセージは表示されませんが、実行するとコンソールの黒い画面しか表示されません。何度も試しましたが、間違いを見つけることができませんでした。

4

2 に答える 2

1

あなたの機能qsチェック条件では、このようにする必要があります

  if(p>=q)
  {

    return(arr);
  }

それ以外の場合、関数への無限の再帰呼び出しがありますqs

于 2013-08-19T05:59:33.420 に答える
0

修正qs():

セグメンテーション違反を引き起こす無限再帰があります

int *qs(int arr[],int p,int q)
{
 int pos;
 if(p<q){
  pos=partition(arr,p,q);
  qs(arr,p,pos-1);
  qs(arr,pos+1,q);
  return(arr);
 }
}
于 2013-08-19T05:58:55.123 に答える