您的位置:首页 > 编程语言 > C#

C#实现的常见排序算法

2011-12-18 18:27 302 查看
对于排序算法,我面试时准备得比较多,从开始工作之后,一直没碰到过要自己排序的,上次写一例子竟然出错了,我将选择排序法与冒泡排序法弄混了,于是花点时间再温习温习。写此文主要是备忘,如果同时能够帮助到找工作的学弟,那就更好了。
主要讲四种排序方法:冒泡排序法、选择排序法、快速排序法以及插入排序法。

1.冒泡排序法

思想(以从小到大顺序排序):每轮相邻两个两两比较将比较,将最大的冒到最后面,每轮确定一个,如果某轮没有任何变换,则说明已经全部完成,可以提前退出。
代码如下:

public static void BubbleSort ( int []array)
{
int length = array.Length;
for (int i = 0; i < length; i++)
{
bool flag = true;
for (int j = 0; j < length - i - 1; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
//如果这一轮没有任何变动则说明已经全部排完,可以提前退出
if(flag)
{
break;
}
}
}


2.选择排序法

思想:每轮将最小数的索引找到,确定一个数。
public static void SelectionSort(int[] array)
{
int length = array.Length;
for (int i = 0; i < length - 1; i++)
{
int minIndex = i;
for (int j = i + 1; j < length; j++)
{
if (array[minIndex] > array[j])
{
minIndex = j;
}
}
if (i != minIndex)
{
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
}



3.快速排序法

思想:递归实现一个区间的排序(还比较复杂,建议看数据结构书上的图或者实际一步步看效果,掌握了就不难了)。
public static void QuickSort(int[] array, int low, int high)
{
int i = low;
int j = high;
int temp = array[low];
while (low < high)
{
while (low < high && array[high] > temp)
{
high--;
}
array[low] = array[high];
while (low < high && array[low] < temp)
{
low++;
}
array[high] = array[low];
}
high--;
array[low] = temp;

if (i < low - 1)
{
QuickSort(array, i, low - 1);
}
if (j > low + 1)
{
QuickSort(array, low + 1, j);
}
}

4.插入排序法

思想:将数组中第n个数插到已经排好序的前n-1个数中。
public static void InsertSort(int[] array)
{
for (int i = 1; i < array.Length; i++)
{
int temp = array[i];
int j = i;
while ((j > 0) && (array[j - 1] > temp))
{
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
}

我对于这四种排序算法的认识,冒泡排序法留着面试用,平时用选择排序法,对于无规律的大量数据用快速排序法,对于基本已经有序或局部有序的用插入排序。之所以将冒泡排序法留着面试用,因为其本身效率并不好(这个可以自己调研),而且我发现好多面试的都是考的冒泡排序法,例如我们公司招人时面试题上有些题直接刷人,其中就有冒泡排序法。平时用选择排序法就能满足需求。
后记:这篇文章例子写于12月7日,之所以当时没有发表,因为我发现了博客园上的一篇文章也是写排序算法的,而且也是只有这四种,更不爽的是他的快速排序法与我写的一模一样(包括所有的命名),后来也想通了,这些排序算法都不是我发明的,只能说明我当时学习的版本就跟他是一个版本的。本来想把他的链接也贴上的,今天找了一会没找到,也不知道当时他的题目是什么。

代码Demo下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: