排序【未完待續】

糖醋麻辣蝦發表於2018-10-08

 

快速排序

  快排的思想主要在於每次劃分確定一個元素的位置,使其左側的元素均小於它,右側的元素均大於它,再對左右兩側遞迴。

int partition(int a[], int low, int high)
{
	int x = a[high]; // 先以最右側作為樞軸
	int j = low - 1; // j記錄的是最後一個比樞軸小的位置
	for (int i = low; i < high; i++)
	{
		if (a[i] < x) // 如果a[i]比樞軸小,就將j右移一個單位,並交換i和j所指元素
		{
			int temp;
			j++;
			temp = a[j];
			a[j] = a[i];
			a[i] = temp;
		}
	}
	a[high] = a[j + 1]; // 迴圈結束後,從low到j的位置所對應的元素均小於樞軸,將第j+1個元素和樞軸位置交換
	a[j + 1] = x;
	return j + 1;
}

void quickSort(int a[], int low, int high)
{
	if (low < high)
	{
		int middle = partition(a, low, high);
		quickSort(a, low, middle - 1);
		quickSort(a, middle + 1, high);
	}
}

 


未完待續

 

相關文章