快速排序

基本思路:

1.先從數列中找到一個數作爲基數。

2.在分區過程中找到比基數大的數放在基數右邊,小的數放在分區左邊。

3.再對左右兩個區間繼續二過程,直到該區間只有一個數。

具體實現:

1.令i=L,j=R,選出一個數作爲基數,存在x中。

2.從後往前(j--)找比x小的數,找到後填入空位。

3.再從前往後(i++)找比x大的數,找到後填入空位。

4.直到i==j,將x填入最後一個空位。

5.繼續對左右分開的的兩個區間重複以上排序過程

void quick_sort(int *s,int l,int r)
{
	if(l<r)
	{
		int i=l,j=r,x=s[l];//x作爲基數
		while(i<j)
		{
			while(i<j&&s[j]>=x)//從後往前查找比x小的數
			j--;
			if(i<j) s[i++]=s[j];//滿足條件,插入空位
			while(i<j&&s[i]<x)//從前往後查找比x大的數
			i++;
			if(i<j) s[j--]=s[i];//滿足條件,插入空位
		}
		s[i]=x;//基數x進入空位。
		quick_sort(s,l,i-1);//分治
		quick_sort(s,i+1,r);
	}	
}


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