C# 基础排序与查找算法
排序算法:
class Sort
{
static void swap<T>(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
} #region 冒泡排序
public static void Bubble(ref int[] arr)
{
for (int i = ; i < arr.Length - ; i++)
for (int j = i + ; j < arr.Length; j++)
if (arr[i] > arr[j])
swap(ref arr[i], ref arr[j]);
}
//其它数据类型同上
public static void Bubble(ref string[] arr)
{
for (int i = ; i < arr.Length - ; i++)
for (int j = i + ; j < arr.Length; j++)
if (arr[i].CompareTo(arr[j]) > )
swap(ref arr[i], ref arr[j]);
}
#endregion #region 选择排序
public static void Select(ref int[] arr)
{
for (int i = ; i < arr.Length; i++)
{
int min = i;
for (int j = i + ; j < arr.Length; j++)
if (arr[j] < arr[min])
min = j;
swap(ref arr[i], ref arr[min]);
}
}
//其它数据类型同上
#endregion #region 插入排序
public static void Insert(ref int[] arr)
{
for (int i = ; i < arr.Length; i++)
{
int tmp = arr[i];
int j = i;
while (j > && arr[j - ] >= tmp)
{
arr[j] = arr[j - ];
j--;
}
arr[j] = tmp;
}
}
//其它数据类型同上
#endregion
}
查找算法
class Search
{
static void swap<T>(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
} #region 顺序查找
public static int SeqIndex(int[] arr, int val)
{
for (int i = ; i < arr.Length; i++)
if (arr[i] == val)
return i;
return -;
}
public static int FindMin(int[] arr)
{
int min = arr[];
for (int i = ; i < arr.Length; i++)
if (arr[i] < min)
min = arr[i];
return min;
}
public static int FindMax(int[] arr)
{
int max = arr[];
for (int i = ; i < arr.Length; i++)
if (arr[i] > max)
max = arr[i];
return max;
} //自组织数据加快顺序查找速度,二八原则,常用的前移
public static int CustSeqIndex(ref int[] arr, int val)
{
for (int i = ; i < arr.Length; i++)
if (arr[i] == val)
{
if (i > arr.Length * 0.2)
{
swap(ref arr[i], ref arr[i - ]);
return i - ;
}
else return i;
}
return -;
}
#endregion #region 二叉查找 须对有序数组
public static int BinaryFind(int[] arr, int val)
{
int min = , max = arr.Length - ;
while (min <= max)
{
int mid = (min + max) / ;
if (arr[mid] < val)
min = mid + ;
else if (arr[mid] > val)
max = mid - ;
else return mid;
}
return -;
}
//用递归法重写上述功能,效率没上面循环方法高
public static int RBinaryFind(int[] arr, int val, int min, int max)
{
if (min > max)
return -;
else
{
int mid = (min + max) / ;
if (arr[mid] == val)
return mid;
else
{
if (arr[mid] < val)
min = mid + ;
else max = mid - ;
return RBinaryFind(arr, val, min, max);
}
}
}
#endregion
}
C# 基础排序与查找算法的更多相关文章
- java基础---数组的查找算法(2)
一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...
- python基础一 ------排序和查找算法
插入排序; 假设数组长度为n,先从第二个元素开始,与前一个元素比较,之后将较小的元素 放在前面,现在前两个元素是有顺序的,这时取第三个元素,与前一个元素(也就是第二个)比较,较小的放在前面 ...
- 面试常问的几个排序和查找算法,PHP实现
冒泡,快排,二分查找,都是面试常问的几个算法题目,虽然简单,但是一段时间不用的话就很容易忘记,这里我用PHP实现了一下,温故而知新. 排序 冒泡排序 每一次冒出一个最大的值 function bubb ...
- [PHP] 排序和查找算法
知乎:冒泡排序(bubble sort)的原理是什么? 潘屹峰: 冒泡排序的原理可以顾名思义:把每个数据看成一个气泡,按初始顺序自底向上依次对两两气泡进行比较,对上重下轻的气泡交换顺序(这里用气泡轻. ...
- C#常用排序和查找算法
1.C#堆排序代码 private static void Adjust (int[] list, int i, int m) { int Temp = list[i]; int j = i * 2 ...
- python 排序和查找算法
一.搜索 1.顺序查找 数据存储在具有线性或顺序关系的结构中时,可顺序访问查找 def sequential_search(ilist, item): pos = 0 while pos < l ...
- javascript排序 查找算法大全
在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...
- Java面试宝典系列之基础排序算法
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
- PHP数组基本排序算法和查找算法
关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...
随机推荐
- 【以前弄的老东西】DLLspy超犀利后门 (源代码+程序+使用手册+二次开发文档)
这个玩意儿是很久之前的整的.一直没有做完,但是基本功能和框架都做好了,现在发出来,希望有能力的家伙一起完成.DLLspy,绝对免杀,隐藏,HTTP请求劫持,居家旅行,杀人放火必备良药.有时间我会继续开 ...
- MsXml创建和解析XML示例
一.MsXml创建XML文档示例 // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MSXM ...
- 【转】android 属性动画之 ObjectAnimator
原文网址:http://blog.csdn.net/feiduclear_up/article/details/39255083 前面一篇博客讲解了 android 简单动画之 animtion,这里 ...
- python对象
一: 基本概念 在pyhton中一切皆对象,就像类unix中的一切皆文件一样,恩,一切.把事物当作对象进行处理, 这样自然就成了面向对象的编程了. 所有的 Python 对像都拥有三个特性:身份,类型 ...
- u-boot-2010.09移植(A)
第一阶段 1.开发环境 系统:centOS6.5 linux版本:2.6.32 交叉编译器:buildroot-2012.08 以上工具已经准备好,具体安装步骤不再 ...
- SDDC-SDN-SDS
SDDCSDNSDS软件定义存储是一个较大的行业发展趋势,这个行业还包括软件定义网络(SDN)和软件定义数据中心(SDDC). SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切 ...
- 【转】无法将notepad++添加到打开方式列表中的解决办法
问题:想要设置notepad++为默认打开方式,却发现在点击browse找到notepad++.exe点击打开后没有在打开方式列表中找到notepad++. 原因:更新程序版本后程序的路径发生了变动. ...
- Python 获得对象内存占用内存大小 sys.getsizeof
from sys import getsizeof class A(object): pass class B: pass for x in (None, 1, 1L, 1.2, 'c', [], ( ...
- [转]PHP如何关闭notice级别的错误提示
1.在php.ini文件中改动error_reporting改为: error_reporting=E_ALL & ~E_NOTICE 2.如果你不能操作php.ini文件,你可以使用如下方法 ...
- 【原创】刚刚发现的SVN的几个有用的功能
一.可看到一个文件/目录跨Branch的所有变更历程 二.SVN可自动利用Word2013的审阅功能对比docx文档