您的位置:首页 > 编程语言 > Java开发

快速排序 -JAVA详解

2017-10-26 16:46 288 查看
/**
* 快速排序是一种基于分治法的排序方法,平均时间复杂度 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 算法