/**
* 快速排序是一种基于分治法的排序方法,平均时间复杂度 O(NLogN),主要思想是选取一个基准元素,遍历数组,比基准元素大的放到右边,小的放到左边,然后递归处理
*
* author yanhom
* createTime 2017/10/26
*/
public class QuickSort {
/**
* 1.对输入的数组选取一个基准元素,比如第一个元素为基准元素,并用一个变量temp去保存它
* 2.定义三个变量,i,j工作变量,t为临时变量在交换i,j两个位置元素用
* 3.从右边开始移动j,比较arr[j]和temp的大小,大的话j--,小的话j停止,i++开始,比较arr[i]和temp的大小,小的话i++,大的话停止;
* 4.此时i和j都停止,说明找到一组要交换的值,然后交换,交换完之后继续循环,直到i=j时退出循环
* 5.退出循环说明i = j,此时交换temp元素和arr[i]
* 6.到此temp左边元素比temp小,temp右边元素比temp大
* 7.递归处理左边右边,完之后数组有序
*
* @param arr 数组
* @param left 数组起始位置
* @param right 数组终止位置
*/
public static void quickSort(int[] arr, int left, int right) {
int i, j, t, temp;
if(left > right) {
return;
}
temp = arr[left];
i = left;
j = right;
while (i != j) {
while (arr[j] >= temp && i < j) {
j--;
}
while (arr[i] <= temp && i < j) {
i++;
}
if(i < j) {
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[i];
arr[i] = temp;
quickSort(arr, left, i -1);
quickSort(arr, i + 1, right);
}
public static void main(String[] args) {
int[] arr = {4, 5, 2, 3, 1, 5, 6, 9, 8, 7, 0, 19};
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
快速排序 -JAVA详解
最新推荐文章于 2024-07-17 10:35:12 发布