java实现快速排序

	/*
	 * 一、快速排序的思想
	 * 		快速排序通过讲一个数组划分成两个子数组,然后通过递归调用自身为每一个子数组进行快速排序来实现。
	 * 二、进行划分int partition(long[] arr,int left,int right);
 	 * 		设置关键字 point,将比关键字小的数据放在一组,比关键字大的放在另外一组。
	 * 三、如何自动设置关键字。
	 * 		设置数组最右端为关键字。
	 * 四、实现快速排序sort(long[] arr,int left,int right);
	 * 		运用递归调用方法进行排序。
	 * 打印数组display(int[] arr);
	 */

QuickSort.java

package test;

public class QuickSort {

	public static int partition(long[] arr,int left,int right,long point) {
		//创建左右指针
		int leftPtr = left-1;
		int rightPtr = right;
		//创建循环
		while(true) {
			//将关键字左边都放置为小于point的数字
			while(leftPtr < rightPtr && arr[++leftPtr] < point);
			//将关键字右边都放置为大于point的数字
			while(leftPtr < rightPtr && arr[--rightPtr] > point);
			if(leftPtr>=rightPtr) {
				//最后一次循环后leftPtr==rightPtr此时跳出while循环
				break;
			}else {
				//此时arr[leftPtr]>point而且arr[rightPtr]<point;所以此时将两个位置进行交换
				long temp = arr[leftPtr];
				arr[leftPtr] = arr[rightPtr];
				arr[rightPtr] = temp;
			}
		}
		//将初始的right与(leftPtr==rightPtr)进行交换等同于point与(leftPtr==rightPtr)交换
		long temp = arr[leftPtr];
		arr[leftPtr] = arr[right];
		arr[right] = temp;
		//返回当前的point位置
		return leftPtr;
	}
	//创建递归方法
	public static void sort(long[] arr,int left,int right) {
		if(left>=right) {
			return;
		}else {
			long point=arr[right];
			int partition = partition(arr, left, right,point);
			//关键字左边的部分调用递归进行排序
			sort(arr, left, partition-1);
			//关键字右边的部分调用递归进行排序
			sort(arr, partition+1, right);
		}
	}
	//创建打印方法
	public static void display(long[] arr) {
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
}

testSort.java

package test;

import java.util.Scanner;

public class testSort {
	public static void main(String[] args) {
		System.out.println("请输入数组的长度:");
		Scanner sca = new Scanner(System.in);
		long[] arr = new long[sca.nextInt()];
		for(int i=0;i<arr.length;i++) {
			arr[i] = (long)(Math.random()*50);
		}
		QuickSort.display(arr);
		QuickSort.sort(arr, 0, arr.length-1);
		QuickSort.display(arr);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值