`

C#下的经典排序函数

阅读更多

//选择排序 
class SelectionSorter 
{ 
private int min; 
public void Sort(int[] arr) 
{ 
for (int i = 0; i < arr.Length - 1; ++i) 
{ 
min = i; 
for (int j = i + 1; j < arr.Length; ++j) 
{ 
if (arr[j] < arr[min]) 
min = j; 
} 
int t = arr[min]; 
arr[min] = arr[i]; 
arr[i] = t; 
} 
} 
static void Main(string[] args) 
{ 
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; 
SelectionSorter s = new SelectionSorter(); 
s.Sort(array); 
foreach (int m in array) 
Console.WriteLine("{0}", m); 
} 
} 
//冒泡排序 
class EbullitionSorter 
{ 
public void Sort(int[] arr) 
{ 
int i, j, temp; 
bool done = false; 
j = 1; 
while ((j < arr.Length) && (!done))//判断长度 
{ 
done = true; 
for (i = 0; i < arr.Length - j; i++) 
{ 
if (arr[i] > arr[i + 1]) 
{ 
done = false; 
temp = arr[i]; 
arr[i] = arr[i + 1];//交换数据 
arr[i + 1] = temp; 
} 
} 
j++; 
} 
} 

static void Main(string[] args) 
{ 
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; 
EbullitionSorter e = new EbullitionSorter (); 
e.Sort(array); 
foreach (int m in array) 
Console.WriteLine("{0}", m); 

} 
} 
//快速排序 
class QuickSorter 
{ 
private void swap(ref int l, ref int r) 
{ 
int temp; 
temp = l; 
l = r; 
r = temp; 
} 
public void Sort(int[] list, int low, int high) 
{ 
int pivot;//存储分支点 
int l, r; 
int mid; 
if (high <= low) 
return; 
else if (high == low + 1) 
{ 
if (list[low] > list[high]) 
swap(ref list[low], ref list[high]); 
return; 
} 
mid = (low + high) >> 1; 
pivot = list[mid]; 
swap(ref list[low], ref list[mid]); 
l = low + 1; 
r = high; 
do 
{ 
while (l <= r && list[l] < pivot) 
l++; 
while (list[r] >= pivot) 
r--; 
if (l < r) 
swap(ref list[l], ref list[r]); 
} while (l < r); 
list[low] = list[r]; 
list[r] = pivot; 
if (low + 1 < r) 
Sort(list, low, r - 1); 
if (r + 1 < high) 
Sort(list, r + 1, high); 
} 

static void Main(string[] args) 
{ 
int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; 
QuickSorter q = new QuickSorter(); 
q.Sort(iArrary, 0, 13); 
for (int m = 0; m <= 13; m++) 
Console.WriteLine("{0}", iArrary[m]); 
} 
} 
//插入排序 
public class InsertionSorter 
{ 
public void Sort(int[] arr) 
{ 
for (int i = 1; i < arr.Length; i++) 
{ 
int t = arr[i]; 
int j = i; 
while ((j > 0) && (arr[j - 1] > t)) 
{ 
arr[j] = arr[j - 1];//交换顺序 
--j; 
} 
arr[j] = t; 
} 
} 
static void Main(string[] args) 
{ 
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; 
InsertionSorter i = new InsertionSorter(); 
i.Sort(array); 
foreach (int m in array) 
Console.WriteLine("{0}", m);  
} 
} 
//希尔排序 
public class ShellSorter 
{ 
public void Sort(int[] arr) 
{ 
int inc; 
for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ; 
for (; inc > 0; inc /= 3) 
{ 
for (int i = inc + 1; i <= arr.Length; i += inc) 
{ 
int t = arr[i - 1]; 
int j = i; 
while ((j > inc) && (arr[j - inc - 1] > t)) 
{ 
arr[j - 1] = arr[j - inc - 1];//交换数据 
j -= inc; 
} 
arr[j - 1] = t; 
} 
} 
} 

static void Main(string[] args) 
{ 
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 }; 
ShellSorter s = new ShellSorter(); 
s.Sort(array); 
foreach (int m in array) 
Console.WriteLine("{0}", m);  

} 
} 

分享到:
评论

相关推荐

    c#实现快速排序算法

    c#实现快速排序quick_sort函数

    冒泡排序 C#初学者

    刚刚学的C#语言。。。用C#写了个很简单的冒泡排序方法 是用函数写的 非常容易理解的哦

    关于C#中排序函数的总结

    下面小编就为大家带来一篇关于C#中排序函数的总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    利用 Array.Sort()函数对数组排序

    利用 Array.Sort()函数对数组排序,c#写的简单控制台应用程序

    用VS2010 C# 数组排序 方法

    用C#编写数组排序 方法 有个列子 简单易懂!

    c#编的各种排序方法

    C#编写的经典冒泡排序,还有其他的3种排序方法

    C# 源码 C#2008经典案例

    案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 案例8 在屏幕中央的圓形窗体 案例9 半透明的T形窗体 案例10 多文档MDI窗体 案例11 渐变色...

    C# 排序练习

    利用随机函数生成30000个随机正整数,用多种方法进行排序。 1.这些随机数的取值为5位整数,以每行15个显示。 2.采用的排序方法不低于4种,取自:冒泡排序、直接插入排序、希尔排序、快速排序、选择排序、堆排序、...

    C#设计经典案例设计与实现

    案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 案例8 在屏幕中央的圓形窗体 案例9 半透明的T形窗体 案例10 多文档MDI窗体 案例11 渐变色...

    Visual+C#+2008程序设计经典案例设计与实现.rar

    Visual+C#+2008程序设计经典案例设计与实现 第1章 Visual C#2008与窗体界面 案例1 飘动动画窗体 案例2 透明动画窗体 案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通...

    C#.net_经典编程例子400个

    81 实例068 在ListView控件中对数据排序或统计 83 实例069 在ListView控件中绘制底纹 84 实例070 在列表视图中拖动视图项 85 实例071 用ListView控件选取整行数据 88 实例072 用ListView...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    因上传大小限制,分三卷压缩,分别是:《C#经典编程220例》.(明日科技).【带书签】.zip、《C#经典编程220例》.(明日科技).【带书签】.z01、《C#经典编程220例》.(明日科技).【带书签】.z02 第1章 c#语言及其开发...

    30个C#小程序学习C#的基

    c#.net常用函数和方法集 C#对注册表的操作 choosesubject n个数排序 unknown 猜数字 猜数字个人版 词频统计 第二种方法求一系列数的和 递归方法求阶乘字符串反转 订票 发奖学金 构造函数属性 关闭特定程序 何意数...

    Visual C# 2008程序设计经典案例设计与实现

    案例3 利用API函数实现动画窗体 案例4 闪烁动画窗体 案例5 滚动字幕动画窗体 案例6 超女卡通窗体 案例7 总在最前的登录窗体 案例8 在屏幕中央的圓形窗体 案例9 半透明的T形窗体 案例10 多文档MDI窗体 案例11...

    30个C#小程序

    c#.net常用函数和方法集 c#对注册表的操作 排序 九九乘法表

    C#堆排序实现方法

    本文实例讲述了C#堆排序实现方法。分享给大家供大家参考。具体如下: private static void Adjust (int[] list, int i, int m) { int Temp = list[i]; int j = i * 2 + 1; while (j &lt;= m) { //more ...

    C#基础之数组排序、对象大小比较实现代码

    这个例子定义了一个int数组,然后使用Array.Sort(arr)静态方法对此数组进行排序,最后输出排序后的数组。以上例子将毫无意外的依次输出1,2,3,4,5,6. 为什么Array的Sort方法可以正确的对int数组进行排序呢,...

    轻松学C#(图解版)

    6.5.10 对数组元素进行重新排序 112 6.6 小结 112 6.7 习题 113 第7章 继承 115 7.1 C#的继承机制 115 7.1.1 概述 115 7.1.2 初识继承 116 7.2 访问修饰符 118 7.3 成员继承 121 7.3.1 使用继承字段 121 7.3.2 使用...

    C# 希尔算法实现数字从大到小排序

    基于VS2008开发的C#排序程序,利用希尔算法实现数字的从大到小排序,通过这个小程序你会了解使用希尔排序来交换数据,排序数据等,要注意,输入的数字不能为空或者过大或过小,程序必竟仅实现了基本功能,还有很多...

Global site tag (gtag.js) - Google Analytics