快速排序
2017-08-16 21:36
92 查看
递归思想:
1.将数组划分成两个子数组
2.两个子数组递归调用快排函数继续向下划分两个子数组。。。。
划分子数组的原则:
选取一个基准值A(一般选数组的第一个或最后一个元素),比A小的放左边,比A大的放右边。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1.将数组划分成两个子数组
2.两个子数组递归调用快排函数继续向下划分两个子数组。。。。
划分子数组的原则:
选取一个基准值A(一般选数组的第一个或最后一个元素),比A小的放左边,比A大的放右边。
1
//1.划分数组方法
2
//arr:数组,start:数组起始索引,end:数组结束索引
3
//base:基准值(默认为数组第一一个值)
4
public void partition(int[] arr,int start,int end){
5
if (start < end) {
6
int base = arr[start];//获取基准值
7
int i = start;//左指针
8
int j = end + 1;//右指针
9
while (true) {
10
while (i < end && data[++i] <= base);//左指针往右不断地移,遇到比base大的就跳出循环
11
while (j > start && data[--j] >= base);//右指针往左不断地移,遇到比base小的就跳出循环
12
if (i < j) {
13
swap(arr, i, j);//跳出循环后还没结束,交换左右指针的值
14
} else {
15
break;//结束了,直接跳出大循环
16
}
17
}
18
swap(arr, start, j);//交换基准值(start索引)和j指针的元素位置(此时j所指的数变成类比base小)
19
partition(arr, start, j - 1);//base值左边进行递归划分数组
20
partition(arr, j + 1, end);//base值右边进行递归划分数组
21
}
22
}
23
24
25
//2.排序方法
26
public void quickSort(int[] arr){
27
partition(arr,0,arr.length-1);
28
}
相关文章推荐
- leetcode 27. Remove Element(C语言,快速排序思想,剔除数组中与目标值相等的数)20
- 快速排序
- Python--递归和快速排序 -- quickSort
- 冒泡排序、选择排序跟快速排序
- 算法小记:快速排序
- 快速排序的一些实现技巧(曾经被手写快排打倒过n+1次。。。)
- 快速排序 题目及答案
- 快速排序
- 算法小记:快速排序
- python实现快速排序
- 最容易理解的快速排序方法和程序
- Ural 1082|Gaby Ivanushka|数学推导|快速排序|程序分析
- 数据结构——快速排序
- 经典排序算法之——快速排序
- 算法导论:快速排序和插入排序
- 冒泡排序与快速排序
- c#中快速排序的方法(转载)
- java 快速排序 时间复杂度 空间复杂度 稳定性
- python 3.2 实现快速排序 源代码
- 快速排序