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. OC 线程操作 - GCD快速迭代

    - (void)forDemo{ //全都是在主线程操作的 ; i<; i++) { NSLog(@"--%@", [NSThread currentThread]); } ...

  2. ServiceStack支持跨域提交

    //ServiceStack对浏览器有一定的限制 //修改AppHost.cs文件 using Funq;using ServiceStack;using ServiceStackTest.Servi ...

  3. OCI 编程

    一.环境的配置 1.系统环境:要想使用OCI编程需要安装Oracle的客户端,而这个普通的客户端比较大,方便起见,可以安装即时客户端(Instantclient)作为Oracle的访问客户端.  具体 ...

  4. Codeforces 670D1. Magic Powder - 1 暴力

    D1. Magic Powder - 1 time limit per test: 1 second memory limit per test: 256 megabytes input: stand ...

  5. Vue.js 生命周期的应用

    生命周期示意图 值得注意的几个钩子函数 activated 类型:Function 详细: keep-alive 组件激活时调用. 该钩子在服务器端渲染期间不被调用. 参考: 构建组件 - keep- ...

  6. c++11 stl 学习之 pair

    pair以模板的方式存储两个数据 namespace std {template <typename T1, typename T2>struct pair {// memberT1 fi ...

  7. Mybatis之拦截器原理(jdk动态代理优化版本)

    在介绍Mybatis拦截器代码之前,我们先研究下jdk自带的动态代理及优化 其实动态代理也是一种设计模式...优于静态代理,同时动态代理我知道的有两种,一种是面向接口的jdk的代理,第二种是基于第三方 ...

  8. Devexpress VCL Build v2013 vol 14.1.5 发布

    What's New in 14.1.5 (VCL Product Line)   New Major Features in 14.1 What's New in VCL Products 14.1 ...

  9. servlet-servletContext网站计数器

    1.在项目中新建文件夹新建文件nums.txt 2.在web.xml文件配置 <servlet>     <description>This is the descriptio ...

  10. hdu-1050(贪心+模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 思路:由图可知,1对应2,3对应4,以此类推,如果x,y是偶数则变为奇数: 每次输入两个区间,找 ...