java基本排序算法总结 (二)——快速排序法


在网上论坛上看了很多例子,快速排序算法是各公司面试笔试常考的一种算法,并且在平时的实际应用中表现形式和实现过程也是非常优秀,笔者认为快速排序法的思想就是基于冒泡排序法,冒泡排序法是将相邻元素进行比较来进行元素的交换排序,而快速排序法则通过确定一个基准元素,将比它大或者小的的元素分别归为一组从而进行递归排序,这里具体的实现结果有点像二分法的概念。在这里借用一张网上的图片来进一步解释



如图,首先我们以头一个元素57为基准点,首先与数组的最后一个元素进行比较,57>19则交换到高位,然后与数组第二位进行比较57<69,57交换到低位,而69交换到高位,一次进行比较最后对高位和低位数组分别进行排序。

下面以具体的代码进行分析:

/*
 * @Author:Richardwe
 * @description:快速排序法
 */
public class QuickSort {

	public static void main(String[] args) {
		int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78 };
		quickSort(a, 0, a.length - 1);

		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}

	}

	//取第一位与最后一位为判断基准点 a , 0 ,8
	public static void quickSort(int[] list, int low, int high) {

		if (low < high) {

			int middle = getMiddle(list, low, high); // 将list数组进行一分为二

			quickSort(list, low, middle - 1); // 对低字表进行递归排序

			quickSort(list, middle + 1, high); // 对高字表进行递归排序

		}

	}

	public static int getMiddle(int[] list, int low, int high) {

		int temp = list[low];//49

		while (low < high) {

			while (low < high && list[high] >= temp) {

				high--;

			}

			list[low] = list[high]; // 比中轴小的记录移到低端

			while (low < high && list[low] <= temp) {

				low++;

			}

			list[high] = list[low]; // 比中轴大的记录移到高端

		}

		list[low] = temp; // 中轴记录到尾

		return low; 
	}
}


猜你喜欢

转载自blog.csdn.net/qq_17475155/article/details/51352238
今日推荐