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