/**
* Created by Sheldon on 2019/9/18.
* Project Name: alstudy.
* Package Name: PACKAGE_NAME.
*/
public class QuickSort {
private static int count;
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
int[] num = {6, 2, 7, 3, 8, 9};
System.out.println(arrayToString(num, "未排序"));
QuickSort(num, 0, num.length - 1);
System.out.println(arrayToString(num, "排序"));
System.out.println("数组个数:" + num.length);
System.out.println("循环次数:" + count);
}
/**
* 快速排序
*
* @param num 排序的数组
* @param left 数组的前针
* @param right 数组后针
*/
private static void QuickSort(int[] num, int left, int right) {
//如果left等于right,即数组只有一个元素,直接返回
if (left >= right) {
return;
}
//设置最左边的元素为基准值
int key = num[left];
//数组中比key小的放在左边,比key大的放在右边,key值下标为i
int i = left;
int j = right;
while (i < j) {
//j向左移,直到遇到比key小的值
while (num[j] >= key && i < j) {
j--;
}
//i向右移,直到遇到比key大的值
while (num[i] <= key && i < j) {
i++;
}
//i和j指向的元素交换
if (i < j) {
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
num[left] = num[i];
num[i] = key;
count++;
System.out.println(arrayToString(num, "排序次数" + count));
QuickSort(num, left, i - 1);
QuickSort(num, i + 1, right);
}
/**
* 将一个int类型数组转化为字符串
*
* @param arr
* @param flag
* @return
*/
private static String arrayToString(int[] arr, String flag) {
String str = "数组为(" + flag + "):";
for (int a : arr) {
str += a + "\t";
}
return str;
}
}
Java 快排
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Java基础算法:堆排,快排,二分查找 1. 堆排 满二叉树:所有叶结点都有同样的深度,每个内部结点都有两个儿子 ...
- 前言 Fork/Join框架是Java 7提供的一个用于并发执行任务的框架,其主要思想就是把大任务分割成若干的小任...