QuickSort之C#实现
/// <summary>
/// 快速排序中的切分
/// lIndex已经是基准值,i记录基准值的大小值的边界,j记录目前遍历的边界;
/// i值必须从lIndex+1开始,因为基准值已经在lIndex位置了,
/// i位置的值必须大于基准值,因为发现比基准值小的值,需要和i位置的值交换,
/// 交换结束后,i++,变更基准边界值;
/// 最后,交换基准值和i-1位置的值,基准值归位,i-1位置是基准值的大小值边界,
/// 返回i-1
/// </summary>
/// <param name="values"></param>
/// <param name="lIndex"></param>
/// <param name="rIndex"></param>
/// <returns></returns>
public static int Partition(int[] values,int lIndex,int rIndex)
{
int p = values[lIndex];
int i = lIndex+1;
for(int j = lIndex + 1; j <= rIndex; j++)
{
if (values[j] < p)
{
int temp = values[i];
values[i] = values[j];
values[j] = temp;
i++;
}
}
int tempp = values[lIndex];
values[lIndex] = values[i - 1];
values[i - 1] = tempp;
return i - 1;
}
public static void QuickSort(int[] values,int lIndex,int rIndex)
{
if (lIndex >= rIndex)
{
return;
}
int index = ChoosePivot(values, lIndex, rIndex);
int temp = values[index];
values[index] = values[lIndex];
values[lIndex] = temp;
int j = Partition(values, lIndex, rIndex);
QuickSort(values, lIndex, j - 1);
QuickSort(values, j + 1, rIndex);
}
public static int ChoosePivot(int[] values,int lIndex,int rIndex)
{
Random rand = new Random();
int index = rand.Next(lIndex, rIndex);
return lIndex;
}
int[] values = new int[100000];
Random rand = new Random();
for(int i = 0; i < values.Length; i++)
{
values[i] = rand.Next(0, values.Length);
}
int[] valuesCopy = (int[])values.Clone();
bool ifEqual = true;
for(int i = 0; i < values.Length; i++)
{
if(values[i] != valuesCopy[i])
{
ifEqual = false;
}
}
Console.WriteLine($"排序前:ifEqual->{ifEqual}");
Stopwatch sw = new Stopwatch();
sw.Start();
AlgorithmMethod.QuickSort(values, 0, values.Length - 1);
sw.Stop();
Console.WriteLine($"QuickSort用时:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var a = valuesCopy.ToList();
a.Sort();
valuesCopy = a.ToArray();
sw.Stop();
Console.WriteLine($"Order用时:{sw.ElapsedMilliseconds}ms");
ifEqual = true;
for (int i = 0; i < values.Length; i++)
{
if (values[i] != valuesCopy[i])
{
ifEqual = false;
}
}
Console.WriteLine($"排序后:ifEqual->{ifEqual}");
排序前:ifEqual->True
QuickSort用时:46ms
Order用时:5ms
排序后:ifEqual->True
QuickSort之C#实现的更多相关文章
- quickSort算法导论版实现
本文主要实践一下算法导论上的快排算法,活动活动. 伪代码图来源于 http://www.cnblogs.com/dongkuo/p/4827281.html // imp the quicksort ...
- Javascript算法系列之快速排序(Quicksort)
原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gis ...
- JavaScript 快速排序(Quicksort)
"快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...
- QuickSort 快速排序 基于伪代码实现
本文原创,转载请注明地址 http://www.cnblogs.com/baokang/p/4737492.html 伪代码 quicksort(A, lo, hi) if lo < hi p ...
- quicksort
快排.... void quicksort(int *a,int left,int right){ if(left >= right){ return ; } int i = left; int ...
- 随手编程---快速排序(QuickSort)-Java实现
背景 快速排序,是在上世纪60年代,由美国人东尼·霍尔提出的一种排序方法.这种排序方式,在当时已经是非常快的一种排序了.因此在命名上,才将之称为"快速排序".这个算法是二十世纪的七 ...
- 算法实例-C#-快速排序-QuickSort
算法实例 ##排序算法Sort## ### 快速排序QuickSort ### bing搜索结果 http://www.bing.com/knows/search?q=%E5%BF%AB%E9%80% ...
- python Quicksort demo
__author__ = 'student' ''' quicksort step 1, choose one pivot, such as pivot=la[0] step 2, scan the ...
- 63.如何对单链表进行快排?和数组快排的分析与对比[quicksort of array and linked list]
[本文链接] http://www.cnblogs.com/hellogiser/p/quick-sort-of-array-and-linked-list.html [题目] 单链表的特点是:单向. ...
- 这个代码怎么改??Help快速排序 quicksort
#include<stdio.h>int a[101],n;void quicksort(int left,int right){ int i,j,t,temp; if(l ...
随机推荐
- ABC392E翻译
AT_abc392_e [ABC392E] Cables and Servers 题目描述 有编号从 \(1\) 到 \(N\) 的 \(N\) 台服务器和编号从 \(1\) 到 \(M\) 的 \( ...
- sql sever查询库中每个表是否存在某个列名 列出表名
select t.TABLE_NAME from information_schema.columns t where t.COLUMN_NAME='列名';
- ABAQUS 中的一些约定
目录 自由度notation Axisymmetric elements Activation of degrees of freedom Internal variables in Abaqus/S ...
- 超详细移动端侧AI口罩识别实现与部署(含源码)
开发环境 数据标注:label studio :https://labelstud.io/ 模型训练:tensorflow 附完整的训练源码和数据 部署开发:Android studio + tens ...
- mysql -- 自定义函数及循环结构
和存储过程类似,区别在于存储过程可以有0个或多个返回,但是函数只能有唯一一个返回值 一般而言,存储过程适合批量插入,批量删除,增删改:函数则用于处理数据,查询某个值. 创建 create functi ...
- yolov5 train报错:TypeError: expected np.ndarray (got numpy.ndarray)
前言 mac intel 机器上,使用 yolov5 物体检测训练时报错:TypeError: expected np.ndarray (got numpy.ndarray) 这个错误信息 TypeE ...
- go time时间格式化
时间戳与时间格式相互转化 例一 // 时间戳转时间 str_time := time.Unix(1617279282,0).Format("2006-01-02 15:04:05" ...
- 因为Apifox不支持离线,我果断选择了Apipost!
要说国内最有名的两款API开发工具不是Apipost就是Apifox,因为曾经遭遇到一件事,导致我坚定的选择了Apipost. 有一年春节我攒了足够的年假,提前开开心心的过年回家,路上我的领导给我打电 ...
- SQL Server 中的异常处理
为什么我们需要 SQL Server 中的异常处理? 让我们通过一个示例来了解 SQL Server 中异常处理的必要性.因此,创建一个 SQL Server 存储过程,通过执行以下查询来除以两个数字 ...
- Linux脚本-自动运维部署脚本
背景 公司正常的业务流程是生产服务器上部署的一个程序去读取数据库,并获取所有ip信息,启动socket连接,发送相关业务指令. 目前有一个需求,需要单独测试一个ip,这个单独的ip需要使用另外的程序测 ...