using System;
using System.Text; namespace HuaTong.General.Utility
{
/// <summary>
/// 自定义排序类
/// </summary>
public class Sorter
{
/// <summary>
/// 交换元素位置
/// </summary>
public static void Swap<T>(ref T[] arr, int i, int j)
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
} /// <summary>
/// 冒泡排序
/// </summary>
public static T[] BubbleSort<T>(T[] arr) where T : IComparable
{
for (int i = arr.Length - ; i > ; --i)
{
for (int j = ; j < i; ++j)
{
if (arr[j].CompareTo(arr[j + ]) > )
{
Swap(ref arr, j, j + );
}
}
}
return arr;
} /// <summary>
/// 选择排序
/// </summary>
public static T[] SelectionSort<T>(T[] arr) where T : IComparable
{
for (int i = ; i < arr.Length; ++i)
{
int index = i;
for (int j = i + ; j < arr.Length; ++j)
{
if (arr[j].CompareTo(arr[index]) < ) index = j;
}
Swap(ref arr, i, index);
}
return arr;
} /// <summary>
/// 插入排序
/// </summary>
public static T[] InsertionSort<T>(T[] arr) where T : IComparable
{
for (int i = ; i < arr.Length; ++i)
{
int j = i;
T value = arr[i];
while (j > && arr[j - ].CompareTo(value) > )
{
arr[j] = arr[j - ];
--j;
}
arr[j] = value;
}
return arr;
} /// <summary>
/// 希尔排序
/// </summary>
public static T[] ShellSort<T>(T[] arr) where T : IComparable
{
for (int step = arr.Length >> ; step > ; step >>= )
{
for (int i = ; i < step; ++i)
{
for (int j = i + step; j < arr.Length; j += step)
{
int k = j;
T value = arr[j];
while (k >= step && arr[k - step].CompareTo(value) > )
{
arr[k] = arr[k - step];
k -= step;
}
arr[k] = value;
}
}
}
return arr;
} /// <summary>
/// 快速排序
/// </summary>
public static T[] QuickSort<T>(T[] arr, int startIndex, int endIndex) where T : IComparable
{
int i, j;
T x, y; i = (startIndex < ? : startIndex);
j = (endIndex > arr.Length - ? arr.Length - : endIndex);
if (startIndex > endIndex) return null;
x = arr[(i + j) / ]; while (i <= j)
{
while (arr[i].CompareTo(x) < && i < endIndex)
{
i = i + ;
}
while (x.CompareTo(arr[j]) < && j > startIndex)
{
j = j - ;
}
if (i <= j)
{
y = arr[i];
arr[i] = arr[j];
arr[j] = y;
i = i + ;
j = j - ;
}
} if (startIndex < j) QuickSort(arr, startIndex, j);
if (i < endIndex) QuickSort(arr, i, endIndex); return arr;
} /// <summary>
/// 归并排序
/// </summary>
public static T[] MergeSort<T>(T[] arr, int startIndex, int endIndex, T[] arrF) where T : IComparable
{
startIndex = (startIndex < ? : startIndex);
endIndex = (endIndex > arr.Length - ? arr.Length - : endIndex);
arrF = new T[arr.Length];
if (startIndex >= endIndex) return null;
int m = (startIndex + endIndex) >> ;
MergeSort(arr, startIndex, m, arrF);
MergeSort(arr, m + , endIndex, arrF);
for (int i = startIndex, j = startIndex, k = m + ; i <= endIndex; ++i)
{
arrF[i] = arr[(k > endIndex || j <= m && arr[j].CompareTo(arr[k]) < ) ? j++ : k++];
}
for (int i = startIndex; i <= endIndex; ++i) arr[i] = arrF[i]; return arr;
} /// <summary>
/// 堆排序
/// </summary>
public static T[] HeapSort<T>(T[] arr) where T : IComparable
{
for (int i = ; i < arr.Length; ++i)
{
for (int j = i, k = (j - ) >> ; k >= ; j = k, k = (k - ) >> )
{
if (arr[k].CompareTo(arr[j]) >= ) break;
Swap(ref arr, j, k);
}
}
for (int i = arr.Length - ; i > ; --i)
{
Swap(ref arr, , i);
for (int j = , k = (j + ) << ; k <= i; j = k, k = (k + ) << )
{
if (k == i || arr[k].CompareTo(arr[k - ]) < ) --k;
if (arr[k].CompareTo(arr[j]) <= ) break;
Swap(ref arr, j, k);
}
}
return arr;
}
}
}

c# 自定义排序类(冒泡、选择、插入、希尔、快速、归并、堆排序等)的更多相关文章

  1. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  2. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  3. java 基础排序(冒泡、插入、选择、快速)算法回顾

    java 基础排序(冒泡.插入.选择.快速)算法回顾 冒泡排序 private static void bubbleSort(int[] array) { int temp; for (int i = ...

  4. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

  5. 【数据结构 C++】排序——冒泡、插入、选择、希尔、归并、快排、堆排序

    LeetCode 912. 排序数组 给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = ...

  6. 基本排序-冒泡/选择/插入(python)

    # -*- coding: utf-8 -*- import random def bubble_sort(seq): n = len(seq) for i in range(n-1): print( ...

  7. php中usort自定义排序如何使用

    php中usort自定义排序如何使用 一.总结 一句话总结:多写一个规则函数,而这个函数的写法和普通函数一样,调用的时候规则函数用函数名的字符串. 1.用户自定义规则函数有哪三个? usort — 使 ...

  8. php六种基础算法:冒泡,选择,插入,快速,归并和希尔排序法

    $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序法  *     思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来.  *     比 ...

  9. iOS 开发中常用的排序(冒泡、选择、快速、插入、希尔、归并、基数)算法

    1.冒泡排序: 冒泡算法是一种基础的排序算法,这种算法会重复的比较数组中相邻的两个元素.如果一个元素比另一个元素大(小),那么就交换这两个元素的位置.重复这一比较直至最后一个元素.这一比较会重复n-1 ...

随机推荐

  1. 【WPF】修改ComboBox样式

    修改WPF默认的ComboBox控件样式 如下图所示: 修改代码如下: <UserControl.Resources> <Style TargetType="ToggleB ...

  2. Java-JVM调优常见配置举例

    常见配置举例 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统 下,一般限制在1.5G~ ...

  3. optind变量

    1.这个变量是在什么地方定义的? 答:系统定义的 2.这个变量在什么场景下使用? 答:在解析命令行参数时会用到 3.这个变量存在的意义? 在每调用一次getopt()或getopt_long()类似函 ...

  4. IO模型详解

    IO编程包括: 文件读写 操作 StringIO 和 BytesIO 内存中 操作文件和目录 OS 序列化 json pickling 操作系统内核空间(缓冲区)收发数据: 内核态(内核空间)---- ...

  5. Asp.Net将Session保存在数据库中

    1.由于项目dll文件变动比较频繁,而保存登陆的状态又保存在Session中,所以导致用户经常无故掉线.(dll变动的时候导致Session丢失) 2.有一种方法可以长期保存session,那就是se ...

  6. 我的Android学习路线(一)

    最近实在是闲的无聊,本着不能让自己的时间白白流失的目的,我就决定完成一下之前的诺言:把 Android 开发学了.正好手头有一本<Android 4编程入门经典>,于是便用两天时间把视图部 ...

  7. 自学数据库建模工具--powerdesigner

    网上找了个英文的,版本感觉有点旧12的,但还好英语还行,摸索了一下功能,大概截了几张图,感觉优点:1总共有物理模型pdm,概念模型cdm,业务模型bdm 可以互转,逻辑清晰   2表与表之前的联系,建 ...

  8. ItemsSource数据源 或 集合属性 的定义 ——> 的数据源定义(典型)

    在Xaml中: ItemsSource="{Binding Path=GridDataSource.PoliceforceDataSource}" 在ViewModel中: Obs ...

  9. 重新学习MySQL数据库4:Mysql索引实现原理

    重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...

  10. 2-6-搭建FTP服务器实现文件共享

    ---------------------------------------------- 大纲: FTP服务:(文件传输协议---> File Transfer Protocol) 常见FT ...