做网站学哪个语言最好,南阳微网站,长安网站建设方案,广州天河区建设网站公司基本思想
快速排序Quicksort#xff09;是对冒泡排序的一种改进。 基本思想是分治的思想#xff1a;通过一趟排序将要排序的数据分割成独立的两部分#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小#xff0c;然后再按此方法对这两部分数据分别进行快速排…基本思想
快速排序Quicksort是对冒泡排序的一种改进。 基本思想是分治的思想通过一趟排序将要排序的数据分割成独立的两部分其中一部分的所有数据都比另外一部分的所有数据都要小然后再按此方法对这两部分数据分别进行快速排序整个排序过程可以递归进行以此达到整个数据变成有序序列。
快速排序算法的平均时间复杂度是 O(nlogn)
快速排序法示意图 代码实现
思路**左右双指针移动 **
例从小到大排序下面的数组元素 选择最右侧数值作为基准pivot并将该位置作为坑左指针left指向最左侧数字右指针right指向最右侧数字 左指针向右移动。当左指针与右指针相遇指向同一数字时停下来或者左指针指向数字大于pivot时也停下来将该值填入坑中将坑改为此位置 右指针向左移动。左指针与右指针相遇时停下来或者右指针指向数字小于pivot时也停下来将该值填入坑中将坑改为此位置 循环2、3步直至两指针相遇。如果此时左指针与右指针相遇此时该位置为坑将pivot填入该坑中这样pivot的位置就找好了。 递归以上步骤基准左、右两旁的数列直至数列不可再分则完成排序
备注
递归的出口必须仔细考虑清楚否则就会陷入无穷循环从而使栈溢出这里如果pivot 选在左侧就要先从右侧开始遍历反之则先从左侧开始记得考虑到数值相同的情况
代码落地
public static void quickSort(int[] arr,int startIndex, int endIndex) {if (startIndex endIndex) {return;}int left startIndex, right endIndex, pivot arr[endIndex];while (left right) {while (left right arr[left] pivot) {left;}arr[right] arr[left];while (left right arr[right] pivot) {right--;}arr[left] arr[right];}arr[left] pivot;quickSort(arr, startIndex, left - 1);quickSort(arr, left 1, endIndex);
}参考文章
快速排序法详解
五分钟学会一个高难度算法快速排序
排序算法之快速排序(Java实现)