Skip to content

Commit 9f6592b

Browse files
authored
Merge pull request #10 from di-huang/patch-1
删除多余语句
2 parents 01d3ce3 + d6f397b commit 9f6592b

File tree

1 file changed

+33
-35
lines changed

1 file changed

+33
-35
lines changed

src/cn/edu/tju/rico/sort/QuickSort.java

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,82 @@
33
import java.util.Arrays;
44

55
/**
6-
* Title: 交换排序中的快速排序,目前应用最为广泛的排序算法,是一个递归算法
7-
* Description:快速排序包括两个过程:划分 和 快排
8-
* "划分"是指将原序列按基准元素划分两个子序列
9-
* "快排"是指分别对子序列进行快排
6+
* Title: 交换排序中的快速排序,目前应用最为广泛的排序算法,是一个递归算法
7+
* Description:快速排序包括两个过程:划分 和 快排
8+
* "划分"是指将原序列按基准元素划分两个子序列
9+
* "快排"是指分别对子序列进行快排
1010
*
11-
* 就平均计算时间而言,快速排序是所有内部排序方法中最好的一个
11+
* 就平均计算时间而言,快速排序是所有内部排序方法中最好的一个
1212
*
13-
* 对大规模数据排序时,快排是快的;对小规模数据排序时,快排是慢的,甚至慢于简单选择排序等简单排序方法
13+
* 对大规模数据排序时,快排是快的;对小规模数据排序时,快排是慢的,甚至慢于简单选择排序等简单排序方法
1414
*
15-
* 快速排序依赖于原始序列,因此其时间复杂度从O(nlgn)到O(n^2)不等
16-
* 时间复杂度:最好情形O(nlgn),平均情形O(nlgn),最差情形O(n^2)
15+
* 快速排序依赖于原始序列,因此其时间复杂度从O(nlgn)到O(n^2)不等
16+
* 时间复杂度:最好情形O(nlgn),平均情形O(nlgn),最差情形O(n^2)
1717
*
18-
* 递归所消耗的栈空间
19-
* 空间复杂度:O(lgn)
18+
* 递归所消耗的栈空间
19+
* 空间复杂度:O(lgn)
2020
*
21-
* 可选任一元素作为基准元素
22-
* 稳 定 性:不稳定
21+
* 可选任一元素作为基准元素
22+
* 稳 定 性:不稳定
2323
*
2424
*
25-
* 内部排序(在排序过程中数据元素完全在内存)
25+
* 内部排序(在排序过程中数据元素完全在内存)
2626
*
2727
* @author rico
28-
* @created 2017年5月20日 上午10:40:00
28+
* @created 2017年5月20日 上午10:40:00
2929
*/
3030
public class QuickSort {
3131

3232
/**
33-
* @description 快排算法(递归算法):在递去过程中就把问题解决了
33+
* @description 快排算法(递归算法):在递去过程中就把问题解决了
3434
* @author rico
35-
* @created 2017年5月20日 下午5:12:06
35+
* @created 2017年5月20日 下午5:12:06
3636
* @param target
3737
* @param left
3838
* @param right
3939
* @return
4040
*/
4141
public static int[] quickSort(int[] target, int left, int right) {
42-
43-
if(right > left){ // 递归终止条件
44-
int base_index = partition(target,left, right); // 原序列划分后基准元素的位置
45-
quickSort(target, left, base_index-1); // 对第一个子序列快速排序,不包含基准元素!
46-
quickSort(target, base_index+1, right); // 对第二个子序列快速排序,不包含基准元素!
47-
return target;
42+
if(right > left){ // 递归终止条件
43+
int base_index = partition(target,left, right); // 原序列划分后基准元素的位置
44+
quickSort(target, left, base_index-1); // 对第一个子序列快速排序,不包含基准元素!
45+
quickSort(target, base_index+1, right); // 对第二个子序列快速排序,不包含基准元素!
4846
}
4947
return target;
5048
}
5149

5250

5351
/**
54-
* @description 序列划分,以第一个元素为基准元素
52+
* @description 序列划分,以第一个元素为基准元素
5553
* @author rico
56-
* @created 2017年5月20日 下午5:10:54
57-
* @param target 序列
58-
* @param left 序列左端
59-
* @param right 序列右端
54+
* @created 2017年5月20日 下午5:10:54
55+
* @param target 序列
56+
* @param left 序列左端
57+
* @param right 序列右端
6058
* @return
6159
*/
6260
public static int partition(int[] target, int left, int right){
6361

64-
int base = target[left]; // 基准元素的值
65-
int base_index = left; // 基准元素最终应该在的位置
62+
int base = target[left]; // 基准元素的值
63+
int base_index = left; // 基准元素最终应该在的位置
6664

67-
for (int i = left+1; i <= right; i++) { // 从基准元素的下一个元素开始
68-
if(target[i] < base){ // 若其小于基准元素
69-
base_index++; // 若其小于基准元素,则基准元素最终位置后移;否则不用移动
70-
if(base_index != i){ // 相等情况意味着i之前的元素都小于base,只需要换一次即可,不需要次次都换
65+
for (int i = left+1; i <= right; i++) { // 从基准元素的下一个元素开始
66+
if(target[i] < base){ // 若其小于基准元素
67+
base_index++; // 若其小于基准元素,则基准元素最终位置后移;否则不用移动
68+
if(base_index != i){ // 相等情况意味着i之前的元素都小于base,只需要换一次即可,不需要次次都换
7169
int temp = target[base_index];
7270
target[base_index] = target[i];
7371
target[i] = temp;
7472
}
7573
}
7674
}
7775

78-
// 将基准元素就位
76+
// 将基准元素就位
7977
target[left] = target[base_index];
8078
target[base_index] = base;
8179

8280
System.out.println(Arrays.toString(target));
8381

84-
return base_index; //返回划分后基准元素的位置
82+
return base_index; //返回划分后基准元素的位置
8583
}
8684
}

0 commit comments

Comments
 (0)