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#八大排序算法的更多相关文章

  1. [Data Structure & Algorithm] 八大排序算法

    排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...

  2. 八大排序算法的 Python 实现

    转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...

  3. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  4. Python实现八大排序算法(转载)+ 桶排序(原创)

    插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...

  5. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  6. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  7. 【Python】八大排序算法的比较

    排序是数据处理比较核心的操作,八大排序算法分别是:直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序.基数排序 以下是排序图解: 直接插入排序 思想 直接插入排序是一种最简单的 ...

  8. 八大排序算法 JAVA实现 亲自测试 可用!

    今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题! 另:说一下什么是八大排序算法: 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排 ...

  9. 八大排序算法总结与java实现(转)

    八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...

  10. Python - 八大排序算法

    1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...

随机推荐

  1. 【校招面试 之 C/C++】第26题 C++ 智能指针(二)之 share_ptr

    1.综述 shared_ptr 是一个标准的共享所有权的智能指针, 允许多个指针指向同一个对象. 定义在 memory 文件中(非memory.h), 命名空间为 std. shared_ptr 是为 ...

  2. day7:vcp考试

    Q121. An ESXi 6.x host in the vCenter Server inventory has disconnected due to an All Paths Down (AP ...

  3. mvcpager 表单提交时无法获取pageindex的值

    1.将分布页包含到form中 2.在分布页中新增一个表单hidden元素,name为pageIndex(与控制器中的pageindex保持一尺),将后台获取到的pageindex值通过viewbag初 ...

  4. [BAT]批处理脚本双击可运行,但在定时计划任务中无法执行(当前工作路径不对导致的)

    一开始,红色部分我是用set AutoPath=%cd%,双击可执行,但是将这个批处理脚本放在定时任务中无法执行,后来发现在定时执行的时候,当前工作路径不是批处理脚本所在的路径,而是C:/Window ...

  5. 创建cookie

    cookie的创建using System;using System.Collections.Generic;using System.Linq;using System.Web;using Syst ...

  6. adb占用

    输入netstat -ano | findstr "5037" .然后会弹出提示告诉你哪些进程占用了该端口,记住非0地址的后面的数字 打开任务管理器,点击“进程“,“查看”-“选择 ...

  7. spring 注解 注入属性 和 注解完成bean定义

    1. 使用 @Autowired 和 @Resource 注解来注入属性 2. 使用 @Component.@Repository.@Service.@Controller 注解,就将该类定义为一个B ...

  8. pyqt5和qtdesign的使用

    http://blog.csdn.net/Angelasan/article/details/44917283 发现我的使用时候有点跟他不同. 我是 g: utf- -*- # Form implem ...

  9. div 自适应宽度

    div 自适应宽度 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  10. iOS与PHP/Android AES128 ECB NoPadding加密

    前言 谈谈AES加密,网上有很多的版本,当我没有真正在加密安全问题前,总以为百度出来某个AES加密算法就可以直接使用,实际上当我真正要做加密时,遇到了很多的坑,原来不是拿过来就能用的.写下本篇文章,记 ...