基于二分查找的排序法(抓牌法)
来源:互联网 发布:java实现ftp下载文件 编辑:程序博客网 时间:2024/06/06 01:36
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;
}
- 基于二分查找的排序法(抓牌法)
- 基于二分查找法的数值区间查找
- 排序法 二分查找法
- 排序与查找(一): 二分查找
- 《ASCE1885的源码分析》の基于冒泡排序的二分查找模板
- C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法)
- 冒泡排序、选择排序、二分查找法
- 选择排序 快速排序 二分查找法
- 排序和二分查找(从小到大排序)
- 插入排序的改进版本(二分查找)
- 数据结构--加入二分查找的插入排序(优化)
- 【leetcode】有重复的旋转排序数组查找(二分)
- 二分查找(折半查找) -- 已排序序列的查找算法
- 【排序】冒泡排序法and针对数组的普通查找法和二分查找法
- 【排序】冒泡排序法and针对数组的普通查找法和二分查找法
- 基于数组的二分查找算法
- 基于C++模板的二分查找
- 基于数组二分查找算法的实现
- GG on RAC
- JDOM处理XML快速上手
- Java实现Coparable和Coparator
- SA、SD、SE 这三者的含义及区分
- JIT
- 基于二分查找的排序法(抓牌法)
- (转)局域网内命令集锦
- Android源代码简要分析
- 美化你的应用程序的外观界面
- Android学习笔记之广播机制(1)
- php调试工具Xdebug安装与分析工具Wincachegrind
- 大数乘法
- GXT之旅:第五章:高级Components(1)——Trees和TreeGrid(2)
- 如何使用SQL的UNIQUEIDENTIFIER数据类型