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.基数排序 上述所有的 ...
随机推荐
- [leetcode]163. Missing Ranges缺失范围
Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...
- linux 下 php 安装 event
1.下载event源码包 https://pecl.php.net/package/event 如:event-2.0.4.tgz 2.解压 > tar zxvf event-2.0.4.tgz ...
- jDeveloper运行慢
最近在使用 Jdeveloper 10.1.3.3 版本时发现速度奇慢无比,后经Google,发现如下解决方案:在 jdev.conf 文件的末尾加上如下两行,速度即可得到显著的提高. AddVMOp ...
- 【深度好文】多线程之WaitHandle-->派生-》Semaphore信号量构造
Semaphore 继承自WaitHandle. 信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量. //创建一个限制资源类 //资源数为5,开放资源数为2 //主线程自动占有3个资源 ...
- jQuery中animate()对Firefox无效的解决办法
在使用 animate()做返回顶部的动画时,会出现对Firefox无效的情况,如: $('body').animate({scrollTop:'0'},500); 它对Chrome,IE,Opera ...
- 低配NOSQL
东西写的太简单了 都不好意思说是NOSQL 其实就是STL 的map容器记录了写入的信息 解析了下数据仅此. 分析的时候想了很多 比如学习redis的自写hash,动态调整hash表容量. 比如右值或 ...
- tomcat6.0 配置不同端口访问不同项目
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF ...
- sql中 in 、not in 、exists、not exists 用法和差别
% 的一类. NOTIN:通过 NOTIN 关键字引入的子查询也返回一列零值或更多值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM publishers ...
- 【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件
1.发送get.post携带参数以及post请求接受JSON数据: package cn.qlq.utils; import java.io.BufferedReader; import java.i ...
- linux tty设置详解
http://blog.csdn.net/againyuan/article/details/3905380 linux串口termios NAME termios, tcgetattr, tcset ...