您的位置:首页 > 产品设计 > UI/UE

快速排序--QuickSort

2016-03-11 20:37 417 查看
快速排序是对冒泡排序的一种改良。它的基本思想是:通过一趟排序将要排序的数据分割成两个独立的部分,其中一部分的所有数据都比另一个部分的所有数据小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

一趟快速排序的算法是:

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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: