快速排序和查找第K小元素

Java快排及快排查找第K大的数字
快速排序

public class fastsort {

public static void main(String[] args) {
	int arr[]= {5,4,3,2,1};
	fastsort(arr,0,4);
	System.out.println(arr[0]);

}
static void swap(int arr[],int x,int y) {
	int t=arr[x];
	arr[x]=arr[y];
	arr[y]=t;
}

static int partsort(int arr[],int begin,int end) {
	int left=begin,right=end;
	while(left<right) {
		while(left<right&&arr[right]>arr[begin])
			right--;
		while(left<right&&arr[left]<arr[begin])
			left++;
		swap(arr,left,right);
	}
	swap(arr,begin,left);
	return left;
}

static void fastsort(int arr[],int l,int r) {
	if(l>=r)
		return ;
	int index=partsort(arr,l,r);
	fastsort(arr,l,index-1);
	fastsort(arr,index+1,r);
}

}
开始总栈溢出,经检测后发现递归的时候应该用index-1和inedx+1,务必注意。

用快速排序查找第K大的元素:
利用的思想:快速排序每一次都可以将一个数放到他的最终位置上,所以当这个数是我们要找的数时,输出,如果这个数大于我们要找的数,向这个数的左边递归,否则向右边递归。
Java实现:

static void findsort(int arr[],int l,int r,int k) {
if(l<r) {
int index=partsort(arr,l,r);
if(index==k-1)
System.out.println(arr[index]);
else if(index<k-1)
findsort(arr,index+1,r,k);
else
findsort(arr,l,index-1,k);
}
else
return ;
}

猜你喜欢

转载自blog.csdn.net/cobracanary/article/details/86627514