Java快速排序

451 阅读2分钟

快速排序 被称为对20世纪影响最大的算法之一 基本思想从每次当前考虑的数组中选择一个元素,以这个元素为基点,后面元素进行比较,然后排序成一边小于此基点的,一边大于此基点的,以此类推。

快速排序思想

以下图为例,先选择4为基点,再将4这个元素挪到排好序后它应当所处的位置。4这个元素处在了那个位置就有了一些性质:在4之前的元素都是小于4的,在4以后的元素都是大于4的。然后我们需要做的就是在小于4和大于4的数组里继续使用快速排序的思路继续排序,实现一个递归过程。

Java快速排序代码

package SF;

public class QuickSort {

	private QuickSort() {
		
	}
	private static int partition(int[] arr,int l,int r) {
		
		int v =arr[l];
		int j=l;
		for(int i=l+1;i<=r;i++) {
			if (arr[i]<v) {	
				j++;
				swap(arr,j,i);
			}		
			}
	swap(arr,l,j);
		return j;
		
	}	
	private static void sort(int[] arr ,int l,int r) {
		if(l>=r)
			return;
		int p= partition(arr,l,r);
		sort(arr,l,p-1);
		sort(arr,p+1,r);
	}
	
	public static void sort(int[] arr) {
		
		int n=arr.length;
		sort(arr,0,n-1);
		
	}
	
	public static void swap(int[] arr,int i,int j) {
		int t=arr[i] ;
		arr[i]=arr[j];
		arr[j]=t;
	}
	
	public static void main(String[] args) {
		int [] arr= {2,4,3,1};
		QuickSort.sort(arr);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]);;
			System.out.print("");
		}
	}
	
}

在我这个Java快速排序中,我选择一个基点V,同时定义了两个索引,分别为j、i,其中用来j指向指向最后一个小于V的元素,i用来指向最后一个大于V的元素的下一位,然后进行排序(参考图片如下)。

总结

最后总结一下,这些算法需要理解他们过程,然后在去试着去做一下,中间不会也可以参考一下代码,你会发现其实也并不是那么难,继续努力吧!