天天看點

遞歸調用實作快速排序算法

遞歸調用實作快速排序算法:

快速排序原理:

1.設中樞記錄的關鍵字為pivotkey,則首先從hight所指的位置起向前搜尋找到第一個關鍵字小于pivotkey的記錄和樞軸記錄互相交換

然後從low所指的位置起向後搜尋,找到第一個關鍵字大于pivotkey的記錄和樞軸記錄互相交換,重複這兩步low=hight為止。

2.其中遞歸調用前應該判斷是否low<hight,否則程式将陷入遞歸調用的死循環。

void QuickSort(int num[],int low,int hight)//遞歸實作
{
	//int low,hight;//初始狀态:輸入的數組元素為8個,hight為8,low為0
	int L=low,H=hight;
	int pivotkey,tmp;
	pivotkey=num[low];//子表排序好後low位置的元素一般在子表的中間了。

	if(low<hight)//這句判斷非常重要,如果不進行判斷,hight終會變成-1,則程式會陷入死循環遞歸調用。
	{
		while(low<hight && hight>=0)
		{
			while(low<hight && pivotkey<=num[hight]) hight--;
			   tmp=num[low];  //交換num[low]與num[hight]的值
			   num[low]=num[hight];
			   num[hight]=tmp;	
			while(low<hight && pivotkey>=num[low]) low++;
			   tmp=num[low];  //交換num[hight]與num[low]的值
		       num[low]=num[hight];
		       num[hight]=tmp;
	    }

		//pivotkey position左半邊排序
     	QuickSort(num,L,low-1);
		//pivotkey position右半邊排序
     	QuickSort(num,low+1,H);
	}

}
           

繼續閱讀