您的位置:首页 > 其它

快速排序

2015-03-20 19:36 113 查看
算法描述

快速排序通常是实际排序中最好的选择。快速排序应用了分治法的思想。

从数组中选取一个数当作主元(通常为第一个数或者最后一个数)

分区,小于主元的数放在的它的左边,大于主元的数放在它的右边

对左右分区继续执行上述两个过程直到分区只剩一个元素

算法实现

package sxd.learn.algorithms;

public class QuickSort {

public static void main(String[] args) {

int[] iArray = { 2, 8, 7, 1, 3, 5 ,6 ,4};

QUICK_SORT(iArray, 0, iArray.length - 1);

for (int i : iArray) {

System.out.print(i + ” “);

}

}

public static void QUICK_SORT(int[] iArray, int l, int r) {
if (l < r) {
int i = PARTITION(iArray, l, r);
QUICK_SORT(iArray, l, i - 1);
QUICK_SORT(iArray, i + 1, r);
}
}

public static int PARTITION(int[] iArray, int l, int r) {
int key = iArray[r];
int i = l;
for(int j = l; j < r; j++){
if(iArray[j] <= key){
EXCHANGE(iArray, i ,j);
i++;
}
}
EXCHANGE(iArray, i, r);
return i;
}

public static void EXCHANGE(int[] iArray, int i, int j){
int temp = iArray[i];
iArray[i] = iArray[j];
iArray[j] = temp;
}


}

3.算法分析

值得一提的是PARTITION过程,该函数选取最后一个数当作主元,将小于该主元的数往前移动,这样就将大于主元的数慢慢都对调到后面,小于主元的数对调到前面。插入排序的平均时间复杂度为O(nlgn)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: