高速ソートアルゴリズム(C++/C)


高速ソートはバブルソートと同様に,交換ソートの考え方に基づいている.
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);
}