简单的快速排序算法
快速排序算法是对冒泡排序的一种改进。
快排基本思想是:通过一趟排序将要排序的数据以基准数据分割成独立的两部分,其中一部分的所有数据都比基准数据小,另外一部分的所有数据都比基准数据大,然后再通过递归对这两部分数据分别进行快速排序,实现整个数据变成有序序列。
注: 快速排序的最好的情况(每次数据划分得很均匀)时间复杂度为O(nlogn),最坏的情况(需排序的数据为正序或逆序排列时)复杂度为O(n^2)。
排序步骤
排序数组:[3, 4, 6, 1, 8, 2, 5, 10, 7, 9]
第一次排序的基数为:3
首先基数本身与右边的没一个数进行对比在对比是右边的数字小于基数的本身就将基数的位置与比它本身小的数替换位置,直到没有比它更小的数。
基于基数3得到以下排序结果:
[2, 1, 3, 6, 8, 4, 5, 10, 7, 9]
对于[2, 1]和[6, 8, 4, 5, 10, 7, 9]的数据再通过递归的方式分别进行快速排序。
java代码实现:
package com.cssl;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] arrays = {3, 4, 6, 1, 8, 2, 5, 10, 7, 9};
quickSort(arrays,0,arrays.length-1);
System.out.println(Arrays.toString(arrays));
}
/**
* 快速排序
*/
public static void quickSort(int[] arr, int left, int right) {
//声明一个变量来存储准基数
int pivot;
if (left < right) {
//从小到大
pivot =partinton(arr,left,right);
System.out.println(pivot);
//一直递归处理左边的一堆数
quickSort(arr,left,pivot-1);
//一直递归处理右边的一堆数
quickSort(arr,pivot+1,right);
}
}
/**
* 分片排序
*/
private static int partinton(int[] arr, int left, int rigth) {
//取一个参照数,获取数组中的第一个值
//数字中的3
int key = arr[left];
while (left < rigth) {
//第一次右边先走,右边往左边一步一步移动
while (left < rigth && arr[rigth] >= key) {
//右边向左一步
rigth--;
}
//交换位置
arr[left] = arr[rigth];
//左边往右边走
while (left < rigth && arr[left] <= key) {
left++;
}
//交换位置
arr[rigth] = arr[left];
}
//交换位置
arr[left] = key;
//返回左边的数
return left;
}
}
输出结果
[2, 1, 3, 6, 8, 4, 5, 10, 7, 9]
[1, 2, 3, 6, 8, 4, 5, 10, 7, 9]
[1, 2, 3, 5, 4, 6, 8, 10, 7, 9]
[1, 2, 3, 4, 5, 6, 8, 10, 7, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 10, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
———————————————————————————————————
次内容是我通过此网页https://www.cnblogs.com/KuJo/p/8544775.html自己对于快速排序理解。