快速排序--QuickSort
来源:互联网 发布:怎么搭建卡盟网站源码 编辑:程序博客网 时间:2024/06/08 07:14
快速排序是对冒泡排序的一种改良。它的基本思想是:通过一趟排序将要排序的数据分割成两个独立的部分,其中一部分的所有数据都比另一个部分的所有数据小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟快速排序的算法是:
1)设置两个变量low、hight,排序开始的时候:low=0,hight=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[low];
3)从hight开始向前搜索,即由后开始向前搜索(hight--),找到第一个小于key的值A[hight],将A[hight]和A[low]互换;
4)从low开始向后搜索,即由前开始向后搜索(low++),找到第一个大于key的A[low],将A[low]和A[hight]互换;
5)重复第3、4步,直到low=hight; (3,4步中,没找到符合条件的值,即3中A[low]不小于key,4中A[low]不大于key的时候改变hight、low的值,使得hight=hight-1,low=low+1,直至找到为止。找到符合条件的值,进行交换的时候low, hight位置不变。另外,low==hight这一过程一定正好是low+或hight-完成的时候,此时令循环结束)。
public class QuickSort {public int data[];public QuickSort(int data[]) {this.data = data;}/** * 分割过程 * @param sortArray * @param low * @param hight * @return */private int partition(int sortArray[], int low, int hight) {int key = sortArray[low];while (low < hight) {while (low < hight && sortArray[hight] >= key)hight--;sortArray[low] = sortArray[hight];while (low < hight && sortArray[low] <= key)low++;sortArray[hight] = sortArray[low];}sortArray[low] = key;return low;}/** * 排序过程 * @param low * @param hight */public void sort(int low, int hight) {if (low < hight) {int result = partition(data, low, hight);sort(low, result - 1);sort(result + 1, hight);}}/** * 遍历排序后的数组 */public void display() {for (int i = 0; i < data.length; i++) {System.out.print(data[i]);System.out.print(" ");}}public static void main(String[] args) {int data[] = { 44, 22, 2, 32, 54, 22, 88, 77, 99, 11 };QuickSort qs = new QuickSort(data);qs.sort(0, qs.data.length - 1);qs.display();}}
0 0
- 快速排序(quicksort)
- QuickSort(快速排序)
- 快速排序(quicksort)
- 快速排序QuickSort
- 快速排序(QuickSort)
- QuickSort(快速排序)
- 快速排序(quickSort)
- 快速排序(Quicksort)
- 快速排序 QuickSort
- 快速排序QuickSort.c
- Quicksort 快速排序源程序
- QuickSort 快速排序
- quicksort快速排序
- quicksort快速排序
- (C#)快速排序 Quicksort
- 快速排序算法QuickSort
- 快速排序(QuickSort)
- 快速排序(QuickSort)
- 不再以讹传讹,GET和POST的真正区别
- IP地址与MAC地址的区别
- Linux 配置文件
- 数字最右位问题(分析方法一 找规律)
- GitHub基本命令
- 快速排序--QuickSort
- 系统组件预览
- 定义一个oracle的游标
- Emmet:HTML/CSS代码快速编写神器
- codeforces 630F Selection of Personnel
- 【JAVA】36、面向对象的封装性(下)
- 可展开的列表组件——ExpandableListView简单举例
- online_judge_1367
- linux中fork()函数详解