算法之快速排序

算法之快速排序简介

 * 什么是快速排序? 首先任意选取一个数据(通常选用数组的第一个数)作为关键数据, 然后将所有比它小的数都放到它左边, 所有比它大的数都放到它右边,
 * 这个过程称为一趟快速排序。 值得注意的是,快速排序不是一种稳定的排序算法, 也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

 

代码参考

/**
 * 快速排序
 * 
 * 什么是快速排序? 首先任意选取一个数据(通常选用数组的第一个数)作为关键数据, 然后将所有比它小的数都放到它左边, 所有比它大的数都放到它右边,
 * 这个过程称为一趟快速排序。 值得注意的是,快速排序不是一种稳定的排序算法, 也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一
 * 
 * @author zhang
 *
 */
public class QuickSort {

	// 测试
	public static void main(String[] args) {

		// 定义一个数组
		int[] arr = { 7, 2, 9, 10, 3, 5, 8, 20, 4, 30 };
		System.out.println("没有排序之前的数据:" + Arrays.toString(arr));
		QuickSortMethod(arr, 0, arr.length - 1);
		System.out.println("没有排序之前的数据:" + Arrays.toString(arr));
	}

	// 排序算法

	public static void QuickSortMethod(int[] arr, int start, int end) {

		// 判断,起点坐标小于尾部坐标,才能进行排序
		if (start < end) {
			// 找数组的第一个值为标准值
			int stard = arr[start];

			// 定义 低位和高位的 下标
			int low = start;
			int high = end;

			// 循环进行查找
			while (low < high) {
				// 右边的数比标准的大,那么数的下标向前移动
				while (low < high && stard <= arr[high]) {
					high--;
				}

				// 否则,将右边的数,替换左边的数
				arr[low] = arr[high];

				// 左边的数比标准数小,数的下标向后移动
				while (low < high && stard >= arr[low]) {
					low++;
				}

				// 否则,将左边的数,替换右边的数
				arr[high] = arr[low];
			}

			// 当 low和high的坐标重合了,就把标准的数添加进来
			arr[low] = stard;

			// 处理所有小的数字
			QuickSortMethod(arr, start, low);
			// 处理所有大的数字
			QuickSortMethod(arr, low + 1, end);
		}
	}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值