排序(5)快速排序

4.快速排序

在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。

/// <summary>
	/// 快速排序.
	/// </summary>
	public void SortMethod5()
	{
		recNum = 0;
		int count = m_playerList.Count;
		QuickSort(0,count -1);
		OutPutMsg();
	}
	void QuickSort(int low,int high)
	{
		int i = low;
		int j = high;
		Player tempPlayer = m_playerList[low];
		while(low < high)
		{			
			while(low < high && m_playerList[high].level <= tempPlayer.level)
			{
				high--;
				recNum++;
			    Debug.Log("SortMethod5-----------"+recNum);
			}
			m_playerList[low] = m_playerList[high];
			while(low < high && m_playerList[low].level >= tempPlayer.level)
			{
				low++;
				recNum++;
		    	Debug.Log("SortMethod5-----------"+recNum);
			}
			m_playerList[high] = m_playerList[low];
			high--;
		}
		m_playerList[low] = tempPlayer;
		if(i < low -1)
		{
			QuickSort(i,low -1);
		}
		if(low+1 < j)
		{
			QuickSort(low +1,j);
		}
	}



其实很类似树的折半查找的思路。

这个还是很好理解的,这是代码我还没有很熟练的能写出来。

快速排序的时间复杂度:

最好0(nlog2n),最坏0(n*n)。一般都为0(nlog2n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值