快速排序+基于c#实现
来源:互联网 发布:死亡录像知乎 编辑:程序博客网 时间:2024/04/28 06:59
最近,学习算法导论,对快排法做个总结:
快排的特点:
最坏情况下,对n个数的排序所花的时间是O(n^2)。虽然这个结果比较差,但是快速排序却是用于排序的最佳的实用选择,因为它的平均性能相当好:期望的运行时间为O(nlgn),且O(nlgn)中的隐含因子比较小,另外,它还能够就地排序(也就是不需要另外开辟一个数组空间来进行中间数据存储),在虚存环境中也能很好的工作。
快排的原理:
public static void QuickSort(int[] arr, int p, int r){ if (p < r) { int q = Partition(arr, p, r); QuickSort(arr, q+1, r); QuickSort(arr, p, q - 1); }}
/// <summary> /// 将数组从下标p到r进行分解,返回一个下标(记为q吧), /// 在下标左边的数均小于arr[q],右边的数均大于arr[q] /// </summary> /// <param name="arr"></param> /// <param name="p"></param> /// <param name="r"></param> /// <returns></returns> public static int Partition(int[] arr, int p, int r) { int i = p - 1; int tmp; for (int j = p; j <= r - 1; j++) { if (arr[j] <= arr[r]) { i++; tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } tmp = arr[i + 1]; arr[i + 1] = arr[r]; arr[r] = tmp; return i + 1; }
关键点就在Partition方法了,下面举个例子来看看快速排序Partition的流程:
int[] arr = new int[8] { 2, 8, 7,1,3, 5,6,4};
QuickSort.Partition(arr,0,7);
相信看到这个运行过程后,已经基本理解了快速排序的思想了。现在给一个思考题:
如果数组p到r中的元素都相等,则Partition的返回值是多少呢?怎样才能让它返回(p+r)/2呢?
- 快速排序+基于c#实现
- 快速排序---c#实现
- C#实现快速排序
- C# 实现快速排序
- 快速排序 c#实现
- C#实现快速排序算法
- C#快速排序算法实现
- c# 快速排序算法实现
- C#实现快速排序算法
- 【快速排序算法-C#实现】
- C#代码实现 快速排序
- 基于java的快速排序实现
- 快速排序算法(C#实现)
- 快速排序非递归c#实现
- 2、快速排序(QuickSort)-C#实现
- 数据结构:插入排序/冒泡排序/快速排序/归并排序/堆排序 C#语言实现
- 快速排序基于不同枢纽的实现方法
- 【算法】快速排序——基于分治思想的实现
- Android ViewPager多页面滑动切换以及动画效果
- Pentaho开发环境移交
- sql备份还原全攻略【鸡蛋】
- Clander的用法。如何取得当前时间一个月后/前的时间。如何取得某个月的最后一天。如何取得今年的第一个周一。五月的第二个星期日。如何取得今年的第一周(注意国外的日历和国内可能不一样,如何设置一周开始
- 黑马程序员
- 快速排序+基于c#实现
- 数据导出到execl
- 类型初始值设定项引发异常
- IE去掉链接虚线框的几个方法
- SQL Server 数据库最小宕机迁移方案【鸡蛋】
- Freeplot: MATLAB来帮你手动画图
- C#中数组, 命名空间, Main()方法
- 未来计算:IT四律与三大趋势(张亚勤)
- 中文乱码的解决方式