-4

double の配列を効率的にソートする方法を探しています。バブルソートと選択ソートは知っていますが、どちらも十分に高速ではないようです。クイック ソートについて読みましたが、その仕組みがわかりません。ソースコードの例はたくさんありますが、どれもコメントが不十分です。誰かが私にそれを説明できますか?

4

1 に答える 1

1

qsortがどのように機能するかについて考えた後、これを書きました。qsort はそれほど理解しにくいと思います。おそらくいくつかの最適化が必要であり、元のqsortと比較しておそらくどこにもありませんが、ここにあります. これを手伝ってくれた人々に感謝します。

/*recursive sorting, throws smaller values to left,
bigger to right side, than recursively sorts the two sides.*/
void sort(double szam[], int eleje, int vege){
  if (vege > eleje + 1){            //if I have at least two numbers
    double kuszob = szam[eleje];    //compare values to this.
    int l = eleje + 1;              //biggest index that is on the left.
    int r = vege;                   //smallest index that is on the right side.
    while (l < r){                  //if I haven't processed everything.
      if (szam[l] <= kuszob) l++;   //good, this remains on the left.
      else
        swap(&szam[l], &szam[--r]); //swap it with the farthest value we haven't checked.
    }
    swap(&szam[--l], &szam[eleje]); //make sure we don't compare to this again, that could cause STACK OVERFLOW
    sort(szam, eleje, l);           //sort left side
    sort(szam, r, vege);            //sort right side
  }
  return;                           //if I have 1 number break recursion.
}
于 2013-04-03T05:43:14.590 に答える