C# 快速排序--二分查找法--拉格朗日插值法
1.快速排序
参考自: https://www.cnblogs.com/yundan/p/4022056.html
namespace 快速排序算法
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入待排序数列以 , 分割");
string _s = Console.ReadLine();
string[] _sArray = _s.Split(",".ToCharArray());
int _nLength = _sArray.Length;
int[] _nArray = new int[_nLength];
for (int i = ; i < _nLength; i++)
{
_nArray[i] = Convert.ToInt32(_sArray[i]);
} var list = _nArray.ToList();
QuickSort(list, , _nLength - ); foreach (var i in list)
{
Console.WriteLine(i.ToString());
}
Console.ReadLine();
} //left为0,right为数组长度减一,即分别为数组中第一个和最后一个数的索引
private static int Division(List<int> list, int left, int right)
{
while (left < right)
{
int num = list[left]; //将首元素作为分割位置
if (num > list[left + ]) //前一位 > 后一位
{
list[left] = list[left + ]; //将两处位置对调
list[left + ] = num;
left++;
}
else
{
int temp = list[right];
list[right] = list[left + ];
list[left + ] = temp;
right--;
}
Console.WriteLine(string.Join(",", list));
}
Console.WriteLine("--------------\n");
return left; //指向的此时枢轴的位置
}
private static void QuickSort(List<int> list, int left, int right)
{
if (left < right)
{
int i = Division(list, left, right);
//对枢轴的左边部分进行排序
QuickSort(list, i + , right);
//对枢轴的右边部分进行排序
QuickSort(list, left, i - );
}
}
}
}
2.二分查找法
namespace 二分查找法
{
class Program
{
// 数组,low=0,high为数组长度减一,key为查找的数字
public static int BinarySearch(int[]arr,int low,int high,int key)
{
int mid = (low + high) / ; //中间数字
if (low > high)
{
return -; //查找不到
}
else
{
if (arr[mid] == key)
{
return mid;
}
else if (arr[mid] > key)
{
return BinarySearch(arr, low, mid - , key);
}
else
{
return BinarySearch(arr, mid + , high, key);
}
}
}
static void Main(string[] args)
{
int[] shuzu = { , , , , ,,,,,,,,,, }; //先排好大小顺序
int high = shuzu.Length - ;
int jieguo = BinarySearch(shuzu, , high, );
Console.WriteLine("查找数字下标:"+jieguo);
Console.WriteLine("数组长度:"+shuzu.Length );
Console.ReadLine();
}
}
}
输出:

3.拉格朗日插值法
namespace 拉格朗日插值法
{
class Program
{
private static int Cha(int[] shuzhu, int key)
{
int left = ; //数组中起始位置下标
int right = shuzhu.Length - ; //数组最后一位下标
int middle = -;//查找不到
while (left <= right)
{
middle = left + (right - left) * (key - shuzhu[left]) / (shuzhu[right] - shuzhu[left]);
if (key == shuzhu[middle])
{
return middle;
}
else if (key > shuzhu[middle])
{
left = middle + ;
}
else
{
right = middle - ;
}
}
return -;
}
static void Main(string[] args)
{
int[] num = { , , , , , , , , , ,,,};
int a = Cha(num, );//查找数组中数值为4的下标
Console.WriteLine(a);
Console.ReadLine();
}
}
}
输出:

C# 快速排序--二分查找法--拉格朗日插值法的更多相关文章
- 常用算法1 - 快速排序 & 二分查找
1. 二分查找法: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1. 二分查找法要求数据为一组有序的序列(大到小 ...
- 二分查找法&大O表示法
二分查找法的输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null Python代码(来源于<算法图解>一书): def binary_search( ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- 用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性. #include<stdio.h> //二分查找法 void binary_search(int a[],int start,int mid ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 二分查找法 java
前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ...
- 学习练习 java 二分查找法
package com.hanqi; import java.util.*; public class Test5 { public static void main(String[] args) { ...
- Java-数据结构与算法-二分查找法
1.二分查找法思路:不断缩小范围,直到low <= high 2.代码: package Test; import java.util.Arrays; public class BinarySe ...
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
随机推荐
- Mxgraph使用总结一
一.Mxgraph介绍: mxGraph 是一个 JS 绘图组件适用于需要在网页中设计/编辑 Workflow/BPM流程图.图表.网络图和普通图形的 Web 应用程序.mxgraph 下载包中包括j ...
- unix下网络编程之I/O复用(五)
前言 本章节是用基本的Linux/Unix基本函数加上select调用编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行,客户端和服务端的功能如下: 客 ...
- 构建工具:webpack与grunt/gulp
1. webpack 官网:http://webpack.github.io/docs/ 中文文档:http://www.css88.com/doc/webpack2/ Webpack 是一个模 ...
- ruby on rails 中render的
Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...
- hibernate 延长加载范围
1. 关闭延迟加载功能 lazy="false"2.修改抓取策略 fetch="join"直接查询关联数据,一个联接查询搞定3.使用Hibernate对象的in ...
- 问题:Custom tool error: Failed to generate code for the service reference 'AppVot;结果:添加Service Reference, 无法为服务生成代码错误的解决办法
添加Service Reference, 无法为服务生成代码错误的解决办法 我的解决方案是Silverlight+WCF的应用,Done Cretiria定义了需要在做完Service端的代码后首先运 ...
- Tiny4412 u-boot分析(2)u-boot启动流程
从大方面来说,u-boot的启动分成两个阶段,第一个阶段主要的职责是准备初始化的环境,主要有以下几点 ①设置异常向量表 ②把CPU的工作模式设置为SVC32模式 ③关闭中断.MMU和cache ④关闭 ...
- Android Tombstone 分析
1.什么是tombstone 当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash 的时候,会保存一个 tom ...
- FAILED: Execution Error, return code 2 from org.apache.hadoop
错误遇到的情形: hive整合hbase,hive的数据表 load,select,insert一切正常 通过hive往hbase关联表插入数据的时候报错,错误内容如下: 2016-04-18 14: ...
- hibernate学习笔记(4)表单操作
User.hbm.xml的表单配置: ①主键 <id name="id" type="java.lang.Integer"> <column ...