常用排序工具类:标准【正序、倒序】排序算法‘冒泡排序,选择排序,快速排序’

简介:

常用排序工具类:
SortClass 的摘要说明。
对整形数组进行排序
可以重写每个排序算法支持多类型
注意:数组、对象,为传地址指针的形式
执行方法后会便改原始数组内容。

支持:
1、冒泡排序
2、选择排序
3、快速排序

using System;

namespace 排序算法
{
/// <summary>
/// 排序模式
/// </summary>

public enum SortTypeEnum
{
ASC, //正序 A-Z
DESC //到序 Z-A
}


/// <summary>
/// SortClass 的摘要说明。
/// 对整形数组进行排序
/// 可以重写每个排序算法支持多类型
/// 注意:数组、对象,为传地址指针的形式
/// 执行方法后会便改原始数组内容。
///
/// 支持:
/// 1、冒泡排序
/// 2、选择排序
/// 3、快速排序
/// </summary>

public class SortClass
{
private SortTypeEnum oSortType = SortTypeEnum.ASC;

/// <summary>
/// 构造
/// </summary>

public SortClass(){;}

/// <summary>
/// 构造
/// </summary>
/// <param name="ste">排序模式</param>

public SortClass(SortTypeEnum ste)
{
this.oSortType = ste;
}


/// <summary>
/// 交换函数
/// </summary>
/// <param name="a">第一</param>
/// <param name="b">第二</param>

protected void Swap(ref int a,ref int b)
{
int c = a; a = b; b = c;
}


/// <summary>
/// 排序模式
/// </summary>

public SortTypeEnum SortType
{
get
{
return this.oSortType;
}

set
{
this.oSortType = value;
}

}


/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="a">排序数组</param>

public void BubbleSort(int[] a)
{
int i = a.Length-1;
while(i>=0)
{
for(int j=0;j<a.Length-1;j++)
switch(oSortType)
{
case SortTypeEnum.ASC:
if(a[j]>a[j+1])
{
Swap(ref a[j],ref a[j+1]);
}

break;
case SortTypeEnum.DESC:
if(a[j]<a[j+1])
{
Swap(ref a[j],ref a[j+1]);
}

break;
}

i--;
}

}


/// <summary>
/// 选择排序
/// </summary>
/// <param name="a">排序数组</param>

public void SelectionSort(int[] a)
{
for(int i=0;i<a.Length-1;i++)
{
for(int j=a.Length-1;j>=i+1;j--)
{
switch(oSortType)
{
case SortTypeEnum.ASC:
if(a[i]>a[j])
{
Swap(ref a[i],ref a[j]);
}

break;
case SortTypeEnum.DESC:
if(a[i]<a[j])
{
Swap(ref a[i],ref a[j]);
}

break;
}


}

}

}


/// <summary>
/// 快速排序递归子过程
/// </summary>
/// <param name="a">排序数组</param>
/// <param name="iLo">低位</param>
/// <param name="iHi">高位</param>

private void QuickSortRecursion(int[] a,int iLo,int iHi)
{
int lo = iLo;
int hi = iHi;
int mid = a[(int)((lo+hi) >> 1)];
do
{
switch(oSortType)
{
case SortTypeEnum.ASC:
while(a[lo]<mid) lo ++;
while(a[hi]>mid) hi --;
break;
case SortTypeEnum.DESC:
while(a[lo]>mid) lo ++;
while(a[hi]<mid) hi --;
break;
}

if(lo<=hi)
{
Swap(ref a[lo],ref a[hi]);
lo++;
hi--;
}


}
while(lo<hi);
if(hi>iLo)QuickSortRecursion(a,iLo,hi);
if(lo<iHi)QuickSortRecursion(a,lo,iHi);
}


/// <summary>
/// 快速排序
/// </summary>
/// <param name="a">排序数组</param>

public void QuickSort(int[] a)
{
QuickSortRecursion(a,0,a.Length-1);
}


}

}


测试样例:
// 数组
int[] test = new int[] {9,8,7,4,3,35,4,5,3,21,1,4,57,2,123,4,0};
// 实例化
SortClass sc = new SortClass();
// 排序模式
sc.SortType = SortTypeEnum.DESC;
// 冒泡排序
sc.BubbleSort(test);
// 选择排序
sc.SelectionSort(test);
// 快速排序
sc.QuickSort(test);
// 输出结果
textBox1.Text = "";
for( int i=0;i<test.Length;i++)
{
textBox1.Text += test[i].ToString() +"\r\n";
}



本文转自suifei博客园博客,原文链接http://www.cnblogs.com/Chinasf/archive/2005/05/19/159182.html,如需转载请自行联系原作者
相关文章
|
2月前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
64 4
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
143 67
|
2月前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
129 61
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
154 7
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
128 8
|
3月前
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
3月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
165 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
3月前
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
26 0
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
37 0
|
2天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

热门文章

最新文章