二分排序算法,直接插入排序的变形版,向一个已排序队列中添加元素,添加完成后继续有序的方式进行;
class BinarySort
{
static void Main(string[] args)
{
int[] waitingArrats = new int[] { 15, 27, 36, 53, 4, 69, 87, 0, 88, 89, 90, 91, 6, 5 };
List<int> Datas = new List<int>();
foreach (int p in waitingArrats)
{
Sort(Datas, p);//向有序队列添加新元素
}
foreach (var p in Datas)
{
Console.WriteLine(p);//打印排序结果
}
}
/// <summary>
///
/// </summary>
/// <param name="Datas"></param>
/// <param name="newvalue"></param>
static void Sort(List<int> Datas, int newvalue)
{
int low = 0;
int high = Datas.Count - 1;
int mid = (low + high) / 2;
int index = -1;
if (Datas.Count == 0)
{
Datas.Add(newvalue);
return;
}
while (low <= high)
{
if (newvalue <= Datas[mid])
{//新值在中间位左侧
high = mid - 1;
}
//新值在中间位右侧
if (newvalue > Datas[mid])
{
low = mid + 1;
}
mid = (high + low) / 2;
if (high < low) //当右指针越过中间位,大于左指针时停止
{
index = high + 1;//或者 low
Datas.Insert(index, newvalue);
break;
}
}
}
}