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

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

快速排序原理:

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);
	}

}


 

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