C#八大排序算法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SortDemo
{
class Program
{
static void Main(string[] args)
{
int[] iOriginalArray = new int[] { , , , , , , , , , };
int[] iResultArray = new int[];
//iResultArray = BubbleSort(iOriginalArray); //冒泡排序
iResultArray = QuickSort(iOriginalArray, , iOriginalArray.Length - ); //快速排序
//iResultArray = InsertSort(iOriginalArray); //插入排序
ShowResultArray(iResultArray);
Console.ReadKey();
} /// <summary>
/// 输出结果
/// </summary>
/// <param name="iResultArray"></param>
static void ShowResultArray(int[] iResultArray)
{
for (int i = ; i < iResultArray.Length; i++)
{
Console.Write(iResultArray[i] + " ");
}
} #region 冒泡排序
/*
* 已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。
* 再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。
* 这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。
* 再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。
* 降序排列与升序排列相类似,若a[1]小于a[2]则交换两者的值,否则不变,后面以此类推。
* 总的来讲,每一轮排序后最大(或最小)的数将移动到数据序列的最后,理论上总共要进行n(n-1)/2次交换。
* 优点:稳定
* 时间复杂度:理想情况下(数组本来就是有序的),此时最好的时间复杂度为o(n),最坏的时间复杂度(数据反序的),此时的时间复杂度为o(n*n) 。
* 冒泡排序的平均时间负责度为o(n*n).
* 缺点:慢,每次只移动相邻的两个元素。
*/
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="iOriginalArray"></param>
/// <returns></returns>
static int[] BubbleSort(int[] iOriginalArray)
{
int iTemp = ;
for (int i = ; i < iOriginalArray.Length; i++)
{
for (int j = i + ; j < iOriginalArray.Length; j++)
{
if (iOriginalArray[i] > iOriginalArray[j])
{
iTemp = iOriginalArray[i];
iOriginalArray[i] = iOriginalArray[j];
iOriginalArray[j] = iTemp;
}
}
}
return iOriginalArray;
}
#endregion #region 快速排序
/// <summary>
/// 快速排序
/// </summary>
/// <param name="iOriginalArray"></param>
/// <param name="iLeft"></param>
/// <param name="iRight"></param>
/// <returns></returns>
static int[] QuickSort(int[] iOriginalArray, int iLeft, int iRight)
{
if (iLeft < iRight)
{
int iMiddle = iOriginalArray[(iLeft + iRight) / ];
int i = iLeft - ;
int j = iRight + ;
while (true)
{
while (iOriginalArray[++i] < iMiddle && i < iRight) ;
while (iOriginalArray[--j] > iMiddle && j > ) ;
if (i >= j)
{
break;
}
int iTemp = iOriginalArray[i];
iOriginalArray[i] = iOriginalArray[j];
iOriginalArray[j] = iTemp;
}
QuickSort(iOriginalArray, iLeft, i - );
QuickSort(iOriginalArray, j + , iRight);
}
return iOriginalArray;
}
#endregion #region 插入排序
/// <summary>
/// 插入排序
/// </summary>
/// <param name="iOriginalArray"></param>
/// <returns></returns>
static int[] InsertSort(int[] iOriginalArray)
{
//与前一个数比较,所以下角标从1开始
for (int i = ; i < iOriginalArray.Length; i++)
{
//如果当前数比前一个数小,则开始置换
if (iOriginalArray[i] < iOriginalArray[i - ])
{
//因为,当前小角标会被占用,所以先把需要置换的当前数存为一个临时变量
int iTemp = iOriginalArray[i];
int j = ;
for (j = i - ; j >= && iTemp < iOriginalArray[j]; j--)
{
//比较临时变量是否小于j=[i-1]变量,如果小于,则把 j=[i-1]的值赋值给[j+1]=i变量。一直for循环到临时变量大于j位置的数时,停止循环
iOriginalArray[j + ] = iOriginalArray[j];
}
iOriginalArray[j + ] = iTemp; //最后把临时变量放在对应的位置
}
}
return iOriginalArray;
}
#endregion
}
}
待续
C#八大排序算法的更多相关文章
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- 八大排序算法的 Python 实现
转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
- Python实现八大排序算法(转载)+ 桶排序(原创)
插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...
- 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...
- Java八大排序算法
Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...
- 【Python】八大排序算法的比较
排序是数据处理比较核心的操作,八大排序算法分别是:直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序.基数排序 以下是排序图解: 直接插入排序 思想 直接插入排序是一种最简单的 ...
- 八大排序算法 JAVA实现 亲自测试 可用!
今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题! 另:说一下什么是八大排序算法: 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排 ...
- 八大排序算法总结与java实现(转)
八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...
- Python - 八大排序算法
1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...
随机推荐
- iPhone iPad 各种控件默认高度
iPhone和iPad下各种常见控件的宽度和标准是一样的,所以这里就用iPhone说明. 以下是常见的几种控件的高度.Statusbar,Navigationbar和Tabbar的宽度极其图标大小. ...
- win 下 nginx 与 php的配置
1.下载需要的软件包 php的windows版本(*注意这里下载非线程安全的,nginx使用的是cgi) http://windows.php.net/download/ nginx的window ...
- php iframe 上传文件
我们通过动态的创建iframe,修改form的target,来实现无跳转的文件上传. 具体的实现步骤 1.捕捉表单提交事件 2.创建一个iframe 3.修改表单的target,指向iframe ...
- 品味性能之道<八>:Loadrunner关联技巧与字符处理
一.概述 Loadrunner作为HP出品的性能测试工具,拥有太多奇妙魔法甜点供予性能测试人员享用,其中吃起来比较有嚼劲的那就是关联了.当然在关联之后我们还需要一些简单的字符处理,用以生成 ...
- 20155206 2016-2017-2 《Java程序设计》第9周学习总结
20155206 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 ...
- 使用java做paypal开发时购买东西支付不成功的原因
使用java做paypal开发时购买东西支付不成功的原因 没有设置网站习惯设定,登陆自己的paypal账户,在网站习惯设定上填写回调的url路径,这样就可以 支付成功了并且异步修改订单的状态. 支付成 ...
- 2018.08.17 洛谷[POI2010]GRA-The Minima Game(线性dp)
传送门 短代码神奇dp. 自己yy的思路居然1A了好高兴啊! 不难想到每个人选择的时候一定是取连续的最大的那一段数,自然需要先排序. 然后可以用dp[i]表示当前最大数是a[i]的时候先手可以获得的最 ...
- 对于Serializable id类型的数据的测试
今天编写了一个这样的例子,然后进行了Junit测试,但是发现类型总是不匹配,最后测出如下 public <T> void deleteEntry(Class<T> t, Ser ...
- thinkphp5集成H-ui后台(五)集成webUploader
在所有的编程语言中,都有对文件上传处理的知识点,这里不多赘述.在H-ui中,有一个功能强大的文件上传组件webUploader,今天就来说明和集成一下它. 先看一下webUploader集成后的效果: ...
- Proxy Hosted Virtual
http://books.sonatype.com/nexus-book/reference/confignx-sect-manage-repo.html Public Repositories 对外 ...