快速排序--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
原创粉丝点击