1、 基于二分法的抓牌排序法
此方法主要模拟打扑克牌时在抓牌过程中的排序过程,第一张是基点,随后每一张牌先与第一张牌比小,小则在此位置前插入,否则与最后一张比大,大则追加到末尾。再如果则进行二分法查找与之最临近的点进行插入。
需要用到ArrayList数组,利用其插入操作,及追加操作。
例:int [] ints={3,6,9,2,17,7,4};
/// <summary>
/// </summary>
/// <param name="ints">待排序数组</param>
/// <returns>升序</returns>
public ArrayList Sort_Dichotomy(int[] ints)
{
int count = ints.Length;
int tempCount = 2;//记录当前数组中实际存在的值
ArrayList al = new ArrayList(count + 1);//模拟抓牌
al.Add(0);
al.Add(ints[0]);
for (int i = 1; i < ints.Length; i++)
{
if (ints[i] <= Convert.ToInt32(al[1]))//1.与最小值比小
{
al.Insert(1, ints[i]);
}
else
{
if (ints[i] >= Convert.ToInt32(al[al.Count - 1]))//与最大值比大
{
al.Add(ints[i]);
}
else//二分查找
{
int begin = 0;
int end = tempCount;
while (begin + 1 < end)
{
int middle = (begin + end) / 2;
int r = ints[i] - Convert.ToInt32(al[middle]) >= 0 ? 1 : -1;//分为大于等于、小于
switch (r)
{
case 1://大于
begin = middle;
break;
default:
end = middle;
break;
}
}
al.Insert(end, ints[i]);
}
}
tempCount += 1;//新增1
}
al.RemoveAt(0);
return al;
}