本次博客主要是最近笔试了科大讯飞有一道题是关于快速排序。
快排的基本思想
1.先从数列中取出一个数作为基准数。一般是左边第一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
快排其实是分治法的一种方法。对分治法的理解有助于对快排的理解。
public class quist {
public static void main(String[] args) {
int a[] = new int []{4,3,2,3,6,74,34,9};
quick_sort(a,0,a.length-1);
for (int i:a
) {
System.out.println(i);
}
}
//快排迭函数体
public static void quick_sort(int a[],int left,int right){
if(left < right){
int i= left;
int j = right;
int x = a[left]; //a[left]即是a[i] 为第一个坑。
while (i < j){
//从右向做找比x小的数来填a[i]
while (i<j&& a[j] > x){
j--;
}
if(i < j){
a[i++] = a[j];
}
//从左向右扫描找比小的数来填a[j];
while (i < j&&a[i] < x){
i++;
}
if(i < j){
a[j--] = a[i];
}
}
a[i] = x;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}
}
}
1.i =left; j = right; 将基准数挖出形成第一个坑a[i]。
2.j–由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。