快速排序
来源:互联网 发布:网络语233333什么意思 编辑:程序博客网 时间:2024/05/24 07:03
算法——快速排序
@Author:云都小生
概述——理解快速排序
快速排序算法是一种比冒泡效率更高的算法,既剩时间有省空间。这个算法是由东尼霍尔提出的,后来有很多人进行了优化。
算法是这样的,一开始给定一个数列:{6,2,8,3,5,1,9,4,7,10}
开始的时候,我们选择一个数作为基准数,就选6吧。
接着,我们指定两个哨兵(i,j),它们一个指向这个数列的最左边,一个指向这个数列的最后边。
这个时候,先从右边开始,我们找到比6小的数,找到就停住,然后我们从左边开始找,找到比6大的数,找到就停住。接着我们交换他们的值。
直到这种情况:i==j 我们就直接吧a[i]/a[j]跟基准数交换,这个时候就已经把基数放到真正属于它的位置了。左边的数全部比它小,右边的数全部比它大。
接下来,只要重复上面的步骤,对左边和右边的数列进行排序就行了。
代码实现
import java.util.Arrays;public class Test{ public static void main(String[] args) { int a[] = new int[]{6,2,8,3,5,1,9,4,7,10}; quicksort(a,0,a.length-1); System.out.println(Arrays.toString(a)); } public static void quicksort(int[] a,int left,int right) { int i,j,t,center; //递归返回 if(left>right) { return; } center=a[left]; //center存的是基准数 i=left; j=right; while(i!=j) { //顺序很重要,要先从右边开始找 while(a[j]>=center && i<j) { j--; } //再找右边的 while(a[i]<=center && i<j) { i++; } //交换两个数在数组中的位置(前提是i != j) if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t; } } //最终将基准数归位 a[left]=a[i]; a[i]=center; quicksort(a,left,i-1);//继续处理左边的,这里是一个递归的过程 quicksort(a,i+1,right);//继续处理右边的 ,这里是一个递归的过程 }}
2017/10/30 16:34:36 @Author:云都小生