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)