クイックソートのアルゴリズムについて学んだので、実際にCでコーディングしてみたのですが、基準点を配列の0番目にするとうまくいくのに、真ん中(右端と左端の和/2)にすると並べ替えができません。
エラーは出ませんが、順番がおかしくなります。
C
1#include<stdio.h> 2#include<stdlib.h> 3#define N 10 4void qui_sort(int,int); 5 6int d[N]={2,8,5,3,4,9,1,6,0,7}; 7int lp=0,rp=N-1,pivot; 8int tmp,i; 9 10int main(void){ 11 qui_sort(lp,rp); 12 for(i=0;i<10;i++) 13 printf("%d",d[i]); 14 printf("\n\n"); 15 system("pause"); 16 return 0; 17} 18void qui_sort(int lp,int rp){ 19 int L,R,pivot; 20 L=lp; 21 R=rp; 22 pivot=L; //ここを(L+R)/2にするとおかしくなる 23 24 while(L<R){ 25 while(d[L]<d[pivot]) 26 L++; 27 while(d[pivot]<d[R]) 28 R--; 29 if(L<R){ 30 tmp=d[L]; 31 d[L]=d[R]; 32 d[R]=tmp; 33 } 34 } 35 if(lp<pivot-1) 36 qui_sort(lp,pivot-1); 37 if(pivot+1<rp) 38 qui_sort(pivot+1,rp); 39} 40
それと、テキスト等にあるクイックソートではほとんどがポインタ渡しをしているのですが、その意味と利点についても教えていただきたいです。
学ばれたアルゴリズムにはどのように書かれていましたか.
回答3件
あなたの回答
tips
プレビュー