高速ソートアルゴリズム(C++/C)
高速ソートはバブルソートと同様に,交換ソートの考え方に基づいている.
1)まず1つの境界値を設定し,その境界値により配列を左右2つの部分に分割する.
2)境界値より大きいデータを配列の右側に集め、境界値より小さいデータを左側に集める
3)その後,左と右のデータを独立に並べ替え,左右のデータ群に対してそれぞれ1,2ステップ目の操作(再帰操作)を行う.
1)まず1つの境界値を設定し,その境界値により配列を左右2つの部分に分割する.
2)境界値より大きいデータを配列の右側に集め、境界値より小さいデータを左側に集める
3)その後,左と右のデータを独立に並べ替え,左右のデータ群に対してそれぞれ1,2ステップ目の操作(再帰操作)を行う.
void quickSort(int *a, int left, int right)
{
if (left > right)
return;
int i, j, t, temp;
i = left;
j = right;
temp = a[left]; // ( )
while (i != j)
{
// ,
while (a[j] >= temp && i < j)
--j;
while (a[i] <= temp && i < j)
++i;
if (i < j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
// :while(i!=j) , i
a[left] = a[i];
a[i] = temp;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}