一、快速排序
(一)、什么是快速排序
1. 快速排序是由东尼·霍尔所发展的一种排序算法。
2. 快速排序函数命名:quickSort
1. 分而治之思想
2. 快速排序应该算是在冒泡排序基础上的递归分治法。
1. 从数列中挑出一个元素,称为 "基准"(pivotkey)。
2. 排序数列:所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面,相同的数可以到任一边。
3. 递归。
1. 在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。
2. 在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。
3. 所以可以说时间复杂度:O(nlogn)。
4. 快,而且效率高!
(二)、图例
![在这里插入图片描述](https://img-blog.csdnimg.cn/c4d408c3d3ae45a4bf2022ae05c69d3b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATm9CdWcg44Wk,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
(三)、Java代码
public void quickSort(int[] arrs, int leftIndex, int rightIndex) {
if (leftIndex >= rightIndex) {
return;
}
int left = leftIndex;
int right = rightIndex;
int key = arrs[left];
while (left < right) {
while (right > left && arrs[right] >= key) {
right--;
}
arrs[left] = arrs[right];
while (left < right && arrs[left] <= key) {
left++;
}
arrs[right] = arrs[left];
}
arrs[left] = key;
quickSort(arrs, leftIndex, left - 1);
quickSort(arrs, right + 1, rightIndex);
}
public static void testOfQuickSort() {
int[] arrs = { 5, 11, 1, 0, -1, 15, 20, 100, -99 };
Sort sort = new Sort();
sort.quickSort(arrs, 0, arrs.length-1);
for (int i = 0; i < arrs.length; i++) {
System.out.print(arrs[i]);
System.out.print(" ");
}
}
快速排序:
-99 -1 0 1 5 11 15 20 100