排序算法之快速排序

快速排序

        快排(简称)是一种分而治之的算法,即就是将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另外一部分的所有数据要小,按照这种方法对这两部分分别进行快排,重复实现此过程,最后实现整个数据变成有序序列

        快排的步骤如下:

        以数组a[8]={50,80,95,10,4,56,2,48}为例(数组在程序中可自行输入)

        首先从数组中任意选取一个数据(通常选作第一个数据)作为关键数据,然后将所有比它小的数都放在它的前面,比它大的数都放在它的后面,此过程为一趟快排,其算法如下:

            1.设置两个变量left、right,排序开始的时候,left=1,right=数组长度-1;

            2.以第一个数组元素作为关键数据,赋值给x

            3.让right从后向前搜索,遇到第一个小于x的值,将两者交换,right--

            4.让left向后搜索,遇到第一个大于x的值,将两者交换,left++

            5.重复3,4过程,直到left==right,一趟快排结束

       一趟排序的图解过程如下:

      

完整代码如下:

package wang.second;

public class DemoB {

	public static void pintArray(int[] a) {
		for (int i = 0; i < a.length; i++)
			System.out.print(a[i] + " ");
	}

	private static void swap(int[] a, int i, int j) {
		int t = a[i];
		a[i] = a[j];
		a[j] = t;
	}

	public static void quickSort(int[] a, int left, int right) {
		int i = left;
		int j = right;
		boolean t = true; // 作为左右交换遍历 的标志
		if (i >= j)
			return;
		while (i < j) {
			if (a[i] > a[j]) {
				swap(a, i, j);
				t = t ? false : true;
			}
			// 决定右移还是很左移
			if (t)
				j--; // 从右向左找第一个小于关键值的数据
			else
				i++; // 从左向右找第一个大于关键值得数据

			// 将数组分成两部分,分别对这两部分进行排序

		}
		quickSort(a, 0, i - 1);// 左半部分
		quickSort(a, j + 1, right);// 右半部分
	}

	public static void main(String[] args) {
		int[] a = new int[] { 50, 80, 95, 10, 4, 56, 2, 48 };
		System.out.println("排序之前的数组");
		pintArray(a);
		// 快速排序
		System.out.println("\n排序之后的数组");
		quickSort(a, 0, 7);
		pintArray(a);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值