你知道C#排序的编写及性能吗?

在进行C#排序算法之前,我们先定义一个100位的随机数列,好进行各种排序算法的性能测试。

成都创新互联是一家专注于网站建设、成都网站设计与策划设计,柳江网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:柳江等地区。柳江做网站价格咨询:028-86922220

代码如下:

 /// 
  /// 随机生成100位的数组
///
  /// 返回生成数组
  public static int[] RandomArray()
  {
Random ran = new Random();
int[] arr = new int[100];
int tem;
for (int i = 0; i < 100; i++)
{
 tem = ran.Next(1, 100);
 arr[i] = tem;
}
return arr;
  }

1.冒泡排序 (Bubble Sort)

基础思想:将相邻的记录的关键码进行比较,若前面记录的关键码大于后面记录的关键码,则将它们交换,否则不交换。

代码如下:

/// 
 /// 冒泡排序算法
 ///
 public class BubbleSort : IAction
 {
  #region IAction 成员
  public void Action()
  {
int[] array = Program.RandomArray();
for (int a = 0; a < array.Length; a++)
{
 int item = 0;
 for (int b = array.Length - 1; b > a; b--)
 {
  if (array[b] < array[b - 1])
  {
item = array[b];
array[b] = array[b - 1];
array[b - 1] = item;
  }
 }
}
  }
  #endregion
 }

2.直接插入排序

基础思想: 顺序的将待排序的记录安关键码的大小插入到已排序的记录子序列的适当位置。子序列的记录个数从1开始逐渐增大,当子序列记录个数于首先表中的记录个数相同时排序完毕。

代码如下: 

/// 
 /// 直接插入排序算法
 ///
 public class DirectInsertSort : IAction
 {

  #region IAction 成员

  public void Action()
  {
int[] array = Program.RandomArray();
for (int i = 1; i < array.Length; i++)
{
 if (array[i] < array[i - 1])
 {
  int tem = array[i];
  int j = 0;
  for (j = i - 1; j >= 0 && tem < array[j]; j--)
  {
array[j + 1] = array[j];
  }
  array[j + 1] = tem;
 }
}
  }
  #endregion
 }

3.简单选择排序

基础思想:从待排序的记录序列中选择关键码最小(或)最大的记录并将它也序列中的第一个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它也序列中的第2个记录交换位置,如此重复,直到序列只剩下一个记录为止。

代码如下:

/// 
 /// 简单选择排序算法
 ///
 public class SimpleSelectSort : IAction
 {
  #region IAction 成员
  public void Action()
  {
int[] array = Program.RandomArray();
 int tmp = 0;
 int t = 0;
 for (int i = 0; i < array.Length; i++)
 {
  t = i;
  for (int j = i + 1; j < array.Length; j++)
  {
if (array[t] > array[j])
{
 t = j;
}
  }
  tmp = array[i];
  array[i] = array[t];
  array[t] = tmp;
  }
  #endregion
 }

4.快速排序

基础思想:通过不断比较关键码,以某咯记录为界(该记录成为支点),将待排序列分成两部分。其中,一小部分满足所有记录的关键码都大于或等于支点记录为界将待排序列按关键码中分成两部分的过程,称为一次划分,直到整个序列按关键码有序为止。

代码如下:

 

 ///


 /// 快速排序算法
 ///
 public class QuickSort : IAction
 {

  #region IAction 成员

  public void Action()
  {
int[] array = Program.RandomArray();

QuickSortArray(array, 0, array.Length - 1);
  }

  private void QuickSortArray(int[] arr, int low, int high)
  {
int i = low;
int j = high;
int tmp = arr[low];
while (low < high)
{
 while ((low < high) && arr[high] >= tmp)
 {
  --high;
 }
 arr[low] = arr[high];
 while ((low < high) && arr[low] <= tmp)
 {
  ++low;
 }
 arr[high] = arr[low];
 --high;
}
arr[low] = tmp;
if (i < low - 1)
{
 QuickSortArray(arr, i, low - 1);
}
if (j > low + 1)
{
 QuickSortArray(arr, low + 1, j);
}
  }

  #endregion
 }

通过上面的描述,我们对C#几个主要的排序算法了解清楚了 接下来开始解析它们其中的奥妙吧。其实在此之前 我一直都喜欢使用冒泡来排序,不过通过CodeTimer测试了下  结果如下:

总结:从C#几个常用的排序算法中,我们常用的冒泡法消耗的系统时间是最多了,相比之下快速排序所用的时间倒是很快速。

希望能和大家一起探讨.NET中的神奇,享受编程给我们带来的乐趣~

分享题目:你知道C#排序的编写及性能吗?
链接地址:http://www.shufengxianlan.com/qtweb/news20/250920.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联