よく聞くようなきがするクイックソート
ある値を閾値としてそれとの大小を比較するってことか
quicksort(int a[],int l.int r){
int v,i,j,t;
if(r>1){
v=a[r];i=l-1;j=r;
for(;;){
while (a[++i] <v);
while(a[--j]>v);
if(i>=j) break;
t=a[i];a[i]=a[j];a[j]=t;
}
t=a[i];a[i]=a[r];a[r]=t;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
}
これは再帰をつかったもので再帰を使わずにかくほうほうもあった。
でもめんどくさいから省略~ スタックを使うけど使うとしたら再帰はないほうがいいよなあ。
ある値を閾値としてそれとの大小を比較するってことか
quicksort(int a[],int l.int r){
int v,i,j,t;
if(r>1){
v=a[r];i=l-1;j=r;
for(;;){
while (a[++i] <v);
while(a[--j]>v);
if(i>=j) break;
t=a[i];a[i]=a[j];a[j]=t;
}
t=a[i];a[i]=a[r];a[r]=t;
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
}
これは再帰をつかったもので再帰を使わずにかくほうほうもあった。
でもめんどくさいから省略~ スタックを使うけど使うとしたら再帰はないほうがいいよなあ。
特殊な状況で使えるというこの整列、他のとはちょっと違ってるなあ
for(j=0;j<M;j++) count[j]=0;
for(i=1;i<=N;i++) count[a[i]]++;
for(j=1;j<M;j++)
count[j]=count[j-1]+count[j];
for(i=N;i>=1;i--)
b[count[a[i]]--]=a[i];
まあこういう状況では2重ループがない分効率が良いと考えるのかな
能率の計算についてはよく理解し切れてないみたい。
for(j=0;j<M;j++) count[j]=0;
for(i=1;i<=N;i++) count[a[i]]++;
for(j=1;j<M;j++)
count[j]=count[j-1]+count[j];
for(i=N;i>=1;i--)
b[count[a[i]]--]=a[i];
まあこういう状況では2重ループがない分効率が良いと考えるのかな
能率の計算についてはよく理解し切れてないみたい。