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.基数排序 上述所有的 ...
随机推荐
- OrgChart 组织架构与PHP结合使用
一.OrgChart下载地址: https://github.com/dabeng/OrgChart 二.组织架构的表设计 CREATE TABLE `org_info` ( `id` int(11) ...
- JavaScript跨域总结与解决办法(转)
什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window.name实现的跨域数据传输 5.使用H ...
- MongoDb进阶实践之四 MongoDB查询命令详述
一.引言 上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命名和删除.有了这些基 ...
- db2 统计信息 runstats
1.runstats的语法:runstats on table [模式名].[表名] with distribution and detailed indexes all注意:你可以在所有列上,或者仅 ...
- 20172325 2017-2018-2 《Java程序设计》第九周学习总结
20172325 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 异常 1.学习了异常的基本概念: 2.区分异常与错误: 一个异常是指一个定义非正常情况或错误 ...
- laravel加载视图
1.控制器 2.路由 3.视图
- Laravel Tinker 使用笔记
我们知道,Laravel Tinker 提供了命令行式的交互调试途径.使用极其方便直观. 使用: #php artisan tinker 要点: 命令要在一行上输入完成,回车执行.>>&g ...
- vue.js项目打包上线
最近一直坚持每个月写一个小的vue.js 开发的项目,最后开发完成后想到很久之前给别人回答的一个问题:vue的项目如何上线,当时有千奇百怪的回答,我在想,这些人都是肿了么,vue的官方都说了,这个框架 ...
- 自然语言处理--中文文本向量化counterVectorizer()
1.载入文档 #!/usr/bin/python # -*- coding: utf-8 -*- import pandas as pd import re import jieba from skl ...
- 2018.09.23 codeforces 1053B. Vasya and Good Sequences(前缀和)
传送门 考试的时候卡了一会儿. 显然这个答案只跟二进制位为1的数量有关. 还有一个显然的结论. 对于一个区间[l,r][l,r][l,r],如果其中单个数二进制位为1的数量最大值不到区间所有数二进制位 ...