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 ...
随机推荐
- compile cef2526
fetch --nohooks chromium cd /path/to/chromium/src# git checkout -b 51.0.2704.103 refs/tags/51.0.2704 ...
- C++空类大小
class a {};class b{};class c:public a{ virtual void fun()=0;};class d:public b,public c{}; 类a,b明明是空类 ...
- SpringCloud组件的简单介绍
springcloud官网springcloud中文网站 最近开始接触springcloud,所以先了解了一下最最基本概念. Spring Cloud ConfigSpring配置管理工具包,让你可以 ...
- 最小LINUX系统下U盘的挂载及卸载
U盘挂载命令U盘插入的时候会显示启动信息,启动信息中sda: sda1指U盘的设备名为sda1dev设备目录下有一个sda1设备文件,此设备文件就是我们插入的U盘,我们将这个设备文件挂载到Linux系 ...
- 2018年长沙理工大学第十三届程序设计竞赛 J杯子
链接:https://www.nowcoder.com/acm/contest/96/J来源:牛客网 杯子 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...
- 我和domino不得不说的故事(连载2016-3-2)
1.关于NotesViewEntry 注意:通过NotesViewEntry获取某列的值时,若该列的值为@IsExpandable or @DocNumber 或者是常量时,将不会显示. Set en ...
- Java程序开发中的简单内存分析
首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...
- 升级 AngularJS 至 Angular
Victor Savkin 大神撰写了一系列文章详细介绍如何升级 AngularJS 应用: NgUpgrade in Depth Upgrade Shell Two Approaches to Up ...
- react过渡动画效果的实现,react-transition-group
本文介绍react相关的过渡动画效果的实现 有点类似vue的transition组件,主要用于组件mount和unmount之前切换时应用动画效果 安装 cnpm install react-tran ...
- 问题:C#控制台;结果:C#限制程序只能运行一個实例 (防多开)
C# Console类的具体用法 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-08 这篇文章主要介绍C# Console类的具体用法,需要的朋友可以参考下 Console.Wr ...