快速排序的排序流程--来自百度百科
首先设定一个分界值,通过该分界值将数组分成左右两部分。
- 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
- 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 [
- 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
java代码实现
public class MainTest {
private static int a[]=new int[] {156,256,1,5,9,7,3,2,6,4,8,9,5,2,8};
public static void main(String args[]) {
quicksort(0,a.length-1);
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
/**
* 快速排序
* @param left
* @param right
*/
public static void quicksort(int left,int right) {
int i=left,j=right,temp=a[left];
while(i<j) {
while(i<j&&a[j]>temp) j--;
while(i<j&&a[i]<temp) i++;
if(i<j&&a[i]==a[j]) i++;
else {
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
if(i-1>left) quicksort(left,i-1);
if(j+1<right) quicksort(j+1, right);
}
}