C#实现的常见排序算法
2011-12-18 18:27
302 查看
对于排序算法,我面试时准备得比较多,从开始工作之后,一直没碰到过要自己排序的,上次写一例子竟然出错了,我将选择排序法与冒泡排序法弄混了,于是花点时间再温习温习。写此文主要是备忘,如果同时能够帮助到找工作的学弟,那就更好了。
主要讲四种排序方法:冒泡排序法、选择排序法、快速排序法以及插入排序法。
代码如下:
思想:递归实现一个区间的排序(还比较复杂,建议看数据结构书上的图或者实际一步步看效果,掌握了就不难了)。
我对于这四种排序算法的认识,冒泡排序法留着面试用,平时用选择排序法,对于无规律的大量数据用快速排序法,对于基本已经有序或局部有序的用插入排序。之所以将冒泡排序法留着面试用,因为其本身效率并不好(这个可以自己调研),而且我发现好多面试的都是考的冒泡排序法,例如我们公司招人时面试题上有些题直接刷人,其中就有冒泡排序法。平时用选择排序法就能满足需求。
后记:这篇文章例子写于12月7日,之所以当时没有发表,因为我发现了博客园上的一篇文章也是写排序算法的,而且也是只有这四种,更不爽的是他的快速排序法与我写的一模一样(包括所有的命名),后来也想通了,这些排序算法都不是我发明的,只能说明我当时学习的版本就跟他是一个版本的。本来想把他的链接也贴上的,今天找了一会没找到,也不知道当时他的题目是什么。
代码Demo下载
主要讲四种排序方法:冒泡排序法、选择排序法、快速排序法以及插入排序法。
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下载
相关文章推荐
- 最常见的几种排序算法原理和C#实现类库
- 几种常见排序算法的C#实现
- 常见排序算法学习及C#代码实现
- 常见排序算法的C#实现
- c#实现的3种排序算法
- 8种主要排序算法的C#实现
- 常见比较排序算法的实现
- 四种常见排序算法C++实现
- 8种主要排序算法的C#实现 (二)
- 几种常见排序算法java实现
- 七种常见经典排序算法总结(C++实现)
- 常见排序算法的C语言实现以及算法复杂度分析(持续更新)
- JAVA实现常见简单排序算法
- 几种常见排序算法的实现
- 9-用C#实现的排序算法
- 用Java实现几种常见的排序算法
- 常见排序算法的实现(三)——堆排序
- C#实现所有经典排序算法
- 看得懂的常见排序算法分析(java实现)
- java实现常见的各种排序算法