Java 数据结构 - 快速排序
快速排序是一种高效的排序算法,它基于将数据数组划分成更小的数组。一个大的数组被划分成两个数组,其中一个数组包含小于指定值(例如,枢轴)的值,基于该值进行划分,另一个数组包含大于枢轴值的值。
快速排序划分一个数组,然后递归调用自身两次来排序两个生成的子数组。对于大型数据集,该算法非常高效,因为它的平均和最坏情况复杂度为 Ο(n2),其中 n 是项目的数量。
算法
基于我们对快速排序中划分的理解,我们现在将尝试编写它的算法,如下所示:
Step 1: Choose the highest index value has pivot. Step 2: Take two variables to point left and right of the list excluding pivot. Step 3: left points to the low index. Step 4: right points to the high. Step 5: while value at left is less than pivot move right. Step 6: while value at right is greater than pivot move left. Step 7: if both step 5 and step 6 does not match swap left and right. Step 8: if left ≥ right, the point where they met is new pivot.
快速排序算法
使用枢轴算法递归地,我们最终得到尽可能小的分区。然后对每个分区进行快速排序处理。我们定义快速排序的递归算法如下:
Step 1: Make the right-most index value pivot. Step 2: partition the array using pivot value. Step 3: quicksort left partition recursively. Step 4: quicksort right partition recursively.
示例
import java.util.Arrays; public class QuickSortExample { int[] intArray = {4,6,3,2,1,9,7}; void swap(int num1, int num2) { int temp = intArray[num1]; intArray[num1] = intArray[num2]; intArray[num2] = temp; } int partition(int left, int right, int pivot) { int leftPointer = left -1; int rightPointer = right; while(true) { while(intArray[++leftPointer] < pivot) { // do nothing } while(rightPointer > 0 && intArray[--rightPointer] > pivot) { // do nothing } if(leftPointer >= rightPointer) { break; } else { swap(leftPointer,rightPointer); } } swap(leftPointer,right); // System.out.println("Updated Array: "); return leftPointer; } void quickSort(int left, int right) { if(right-left <= 0) { return; } else { int pivot = intArray[right]; int partitionPoint = partition(left, right, pivot); quickSort(left,partitionPoint-1); quickSort(partitionPoint+1,right); } } public static void main(String[] args) { QuickSortExample sort = new QuickSortExample(); int max = sort.intArray.length; System.out.println("Contents of the array :"); System.out.println(Arrays.toString(sort.intArray)); sort.quickSort(0, max-1); System.out.println("Contents of the array after sorting :"); System.out.println(Arrays.toString(sort.intArray)); } }
输出
Contents of the array : [4, 6, 3, 2, 1, 9, 7] Contents of the array after sorting : [1, 2, 3, 4, 6, 7, 9]
广告