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]
广告