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

简介:

常用排序工具类:
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,如需转载请自行联系原作者
相关文章
|
5月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
320 5
|
5月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
337 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
6月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
278 1
|
5月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
230 0
|
5月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
193 0
|
6月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
147 0
|
5月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
271 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
5月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
221 1
|
5月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
145 0
|
6月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
454 3