• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クイックソートのピボットの値を基準に分割される配列の表示)

クイックソートのピボットの値を基準に分割される配列の表示

このQ&Aのポイント
  • クイックソートのプログラムで、ピボットの値を基準に分割された配列を表示する方法について教えてください。
  • 作成したクイックソートプログラムで、ピボットの値を基準に分割された配列を表示する方法がわかりません。どの部分のプログラムを追加すればいいのでしょうか?
  • クイックソートのプログラムで、ピボットの値を基準に分割された配列を表示するための具体的な手順を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ごめんなさい、#1のやり方では、全体が表示されないですね。 ブサイクなやり方ですけど、全体のサイズを渡して、 #1のタイミングで表示するような感じで書くとこんな感じ #include <stdio.h> #include <stdlib.h> #define MAX 1000 #define FMAX 8 void quick(int a[],int left,int right, int size); int main(void) { int kosu; int atai[MAX]; int i; char fname[FMAX+1]; FILE *fp; printf("並び替える整数の個数 : "); scanf("%d",&kosu); printf("データが格納されたファイル名:"); scanf("%s",fname); if((fp=fopen(fname,"r"))==NULL) { printf("%sファイルがfopenできませんでした。処理を終了します",fname); exit(1); } for(i=0;i<kosu;i++) { fscanf(fp,"%d",&atai[i]); } quick(atai,0,kosu-1, kosu); puts("昇順に並び替えました"); for(i=0;i<kosu;i++) { printf("%d番目の整数 : %d\n",i+1,atai[i]); } fclose(fp); return 0; } void quick(int a[],int left,int right, int size) { int pl=left; int pr=right; int pivot; int tmp; int i; pivot=a[(pl+pr)/2]; printf("ピボットの値は%d\n",pivot); do{ while(a[pl]<pivot) { pl++; } //printf("\n"); while(a[pr]>pivot) { pr--; } if(pl<=pr) { { tmp=a[pl]; a[pl]=a[pr]; a[pr]=tmp; } pl++; pr--; } }while(pl<=pr); for(i = 0 ;i < size;i++){ if(i == (pl + pr)/2) printf("%d ^ ", a[i]); else printf("%d ", a[i]); } printf("\n\n"); if(left<pr) { quick(a,left,pr, size); } if(pl<right) { quick(a,pl,right, size); } }

asanb
質問者

お礼

ありがとうございます プログラミングできました

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>何処にピボットの値を基準に分割される配列の表示 >するプログラムをいれていいかもわからない 分割された位置でquick を呼び出す前 に表示するプログラムを入れる left から pr までと pr pr からright までの内容を表示する

asanb
質問者

補足

そのプログラムはfor文でいれるのですか? 出来ればプログラムを書いていただけませんか? for文の場合は条件はどうすればいいのですか

すると、全ての回答が全文表示されます。

関連するQ&A