分治——快速排序
2017-12-18 12:48
169 查看
快速排序数组元素的思想:
1)设k=a[0],将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k左右出现均可(O(n)时间完成)
2)把k左边的部分快速排序
3)把k右边的部分快速排序
代码:
1)设k=a[0],将k挪到适当位置,使得比k小的元素都在k左边,比k大的元素都在k右边,和k相等的,不关心在k左右出现均可(O(n)时间完成)
2)把k左边的部分快速排序
3)把k右边的部分快速排序
代码:
class Program { static void Main(string[] args) { int[] a = { 93, 27, 30, 2, 8, 12, 2, 8, 30, 89 }; QuickSort(a, 0, a.Length - 1); ArrayOutput(a); } /// <summary> /// 快速排序 /// </summary> /// <param name="a">要进行排序的数组</param> /// <param name="start">数组开始位置</param> /// <param name="end">数组结束位置</param> static void QuickSort(int[] a, int start, int end) { if (start >= end) return; int k = a[start]; int i = start; int j = end; while (i != j) { while (j > i && a[j] >= k) --j; a[i] = a[j]; while (i < j && a[i] <= k) ++i; a[j] = a[i]; } a[i] = k; QuickSort(a, start, i - 1); QuickSort(a, i + 1, end); } /// <summary> /// 输出数组元素 /// </summary> /// <param name="a">数组</param> static void ArrayOutput(int[] a) { for (int i = 0; i < a.Length; i++) { Console.Write(a[i] + " "); } Console.WriteLine(); } }
相关文章推荐
- 分治算法之快速排序
- 算法(分治)合并排序和快速排序
- 分治之快速排序
- 递归与分治-合并排序、快速排序以及循环赛问题
- 递归与分治之快速排序
- 算法之分治思想和快速排序
- 递归与分治之快速排序
- 分治---快速排序
- 算法分析与设计实验 分治策略 两路合并排序和快速排序
- 分治思想的应用之快速排序
- 分治思想:合并排序和快速排序
- 数据结构--排序之快速排序(分治,递归)
- 分治—快速排序
- 分治思想的应用:C++实现快速排序和随机化的快速排序
- 递归分治解决快速排序和限行时间选择
- 分治算法之快速排序
- C语言实现的快速排序,采用分治策略,递归实现
- 分治之快速排序
- 快速排序(递归、分治、划分)
- 算法--排序--分治与快速排序