C言語ソートアルゴリズムの「クイックソート法」


高速法は3つのパラメータを定義(配列ヘッダアドレス*a、配列開始要素の下付きiを並べ替え、配列終了要素の下付きjを並べ替える).まず、配列要素(一般的にはa[(i+j)/2]、すなわち中間要素)を参照として選択し、それより小さい要素を左側に、それより大きいものを右側に置きます.次に再帰を用いて,左,右の2つのサブ配列を並べ替え,最後に配列全体の並べ替えを完了する.コードを分析します.
 
void quick(int *a,int i,int j) 
{ 
    int m,n,temp; 
    int k; 
    m=i; 
    n=j; 
    k=a[(i+j)/2]; /*     */ 
    do { 
        while(a--<k && m<j) m++; /*       k    */ 
        while(a[n]>k && n>i) n--; /*       k    */ 
        if(m<=n) { /*        ,   */ 
            temp=a--; 
            a-=a[n]; 
            a[n]=temp; 
            m++; 
            n--; 
        } 
    }while(m<=n); 
    if(m<j) quick(a,m,j); /*    */ 
    if(n>i) quick(a,i,n); 
}