算法/排序算法/QuickSort快速排序
来源:互联网 发布:宜搜小说软件下载 编辑:程序博客网 时间:2024/05/18 01:41
快速排序基于分治的思想,该方法的基本思路是:
- 先从数列中取出一个数作为基准数。
- 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
- 再对左右区间重复第二步,直到各区间只有一个数。
一趟快速排序的算法是:
- 设置两个变量 i、j,排序开始的时候:i=0,j=N-1
- 以第一个数组元素作为关键数据 key
- 从 j 开始向前搜索,找到第一个小于 key 的值与 key 交换
- 从 i 开始向后搜索,找到第一个大于 key 的值与 key 交换
- 重复第3、4步,直到 i=j,将对应的值与 key 交换
这个过程还可以优化:j 向前扫描时遇到比 key 小的值暂不交换,停止扫描并使 i 开始向后扫描,等到 i 对应的值大于 key 时,直接交换 i 和 j 对应的值,然后继续扫描直到 i、j 相遇,扫描和交换的过程结束。这时 i 左边的值都小于基准值,右边的值都不小于基准值,即 key 回到正确的位置。然后就可以分别对这两部分进行快速排序。
java代码如下:
public class QuickSort { private final static int MAX_NUM = 10; public static void main(String args[]) { int[] array = new int[MAX_NUM]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < array.length; i++) { array[i] = scanner.nextInt(); } for (int i : array) { System.out.print(i + " "); } System.out.println(); int low = 0; int high = array.length - 1; QuickSort tQS = new QuickSort(); tQS.quickSort(array, low, high); for (int i : array) { System.out.print(i + " "); } } void quickSort(int[] array, int low, int high) { int i = low; int j = high; int key = array[low]; while (i < j) { while (array[j] >= key && i < j) { j--; } while (array[i] <= key && i < j) { i++; } if (i < j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } array[low] = array[i]; array[i] = key; if (i > low) { quickSort(array, low, i - 1); } if (j < high) { quickSort(array, i + 1, high); } }}
快速排序的平均时间复杂度为O(nlgn),最坏情况时间可达到O(n^2):当要排序的数据基本有序的时候。我们知道,当把数列平均分成两个等长的数列时效率最高,两部分相差越大效率越低。
为降低最坏情况出现的几率,我们可以采用一种优化的算法 随机快速排序
0 0
- 快速排序算法QuickSort
- 快速排序算法QuickSort
- 快速排序(QuickSort)算法
- QuickSort 快速排序算法
- QuickSort算法(快速排序)
- 算法/排序算法/QuickSort快速排序
- 快速排序(quicksort)算法实现
- Algorithms Quicksort 快速排序算法
- 快速排序(quicksort)算法实现
- 【算法】快速排序法:Quicksort
- 快速排序算法(QuickSort)
- 细说算法-------快速排序QuickSort
- QuickSort 标准快速排序算法
- 算法导论-------快速排序QuickSort
- 算法-排序-快速排序(QuickSort)分析
- 排序算法 之 快速排序(quicksort)
- java排序算法_014快速排序(Quicksort)
- 排序算法笔记-快速排序 Quicksort
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- ssm的文件上传
- layer回调函数
- Substring with Concatenation of All Words
- C#完成超酷的图像效果 (附demo)
- 算法/排序算法/QuickSort快速排序
- C++常用库(转)
- Android Studio依赖项目出现unspecified on project app resolves to an APK archive which is not supported
- 如何将安卓虚拟机中的数据库文件导出到本地
- 常用tf函数汇总
- easyUI tabs控件显示与隐藏以及跳转
- extjs4.2加背景图片
- H264/AVC视频解码时AVC1和H264的区别
- python文件操作