快速排序算法

快速排序算法的思想就是從數字序列中隨便挑一個數,然後比跟剩餘元素逐個比較,比它小的放在它的左邊,比它大的放在它右邊,然後這個數的位置就坐定了,然後分別取這個數左邊的所有元素組成的新序列,還有右邊的新序列,也就是左序列和右序列。用以上方法來遞歸實現。但是爲了不浪費空間,總不能真的每個左序列和右序列都重新創建一個新的數組,可以通過記錄原序列中的左序列右序列起始位置與結尾位置來實現,至於2個位置元素的交換,就用中間變量來記錄了。
void quickSort(int arr[],int left,int right)
{
	if(left < right)
	{
		int i = left,j = right , x = arr[left];//保存第一值arr[l]進x中,相當於把arr[l]這個數從所在位置挖出,留下一個坑,等別人用。
		while(i < j)
		{
			while(i < j && arr[j] >= x)//從右向左找第一個小於x的數arr[j]
				j--;
			if(i < j)
			{
				arr[i] = arr[j];
				i++;
			}
			while(i < j && arr[i] < x)		//從左向右找第一個大於等於x的數arr[i]	
				i++;			
			if(i < j)
			{
				arr[j] = arr[i];
				j--;
			}
		}
		arr[i] = x;           //把x放進最後挖出來的數所在的洞裏
		quickSort(arr , left , i-1);
		quickSort(arr , i+1 , right);
	}
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章