算法1:快速排序
2018-03-12 15:15
218 查看
1.快速排序采用分治的思想。
数组a[p...r]被划分为两个(可能为空)的子数组,a[p..q-1], a[q+1...r]。第一个数组中元素小于a[p],第二个数组中元素大于a[p]。
解决:首先找出p的位置,然后通过递归调用快速排序,对两个子数组进行排序。
步骤:1.确定基准元素a[p];
2.从后往前扫描,若遇到小于a[p]的,将此元素赋值给a[low];否则 high--;
3.从前往后扫描,若遇到大于a[p]的,将此元素赋值给a[high];否则 low++;
4.当high>low时,循环2,3;
5.确定了high的位置,将基准元素a[p]赋值给a[high]。
6.递归调用, 快速排序a[p...q-1], a[q+1...r];
/快速排序,部分
public static int partion(int []array,int low,int high){
//以第一个元素为基准
int temp=array[low];
while(high>low){
//从后往前扫描
while(high>low && array[high]>=temp){
high--;
}
array[low]=array[high];
//从前往后扫描
while (high>low && array[low]<=temp){
low++;
}
array[high]=array[low];
}
//循环玩之后,high所指为基准元素所处位置
array[high]=temp;
return high;
}
//快速排序,递归实现
public static void sort(int []array, int low ,int high){
if(low>=high)return;
int p=partion(array,low,high);
sort(array,low,p-1);
sort(array,p+1,high);
}
数组a[p...r]被划分为两个(可能为空)的子数组,a[p..q-1], a[q+1...r]。第一个数组中元素小于a[p],第二个数组中元素大于a[p]。
解决:首先找出p的位置,然后通过递归调用快速排序,对两个子数组进行排序。
步骤:1.确定基准元素a[p];
2.从后往前扫描,若遇到小于a[p]的,将此元素赋值给a[low];否则 high--;
3.从前往后扫描,若遇到大于a[p]的,将此元素赋值给a[high];否则 low++;
4.当high>low时,循环2,3;
5.确定了high的位置,将基准元素a[p]赋值给a[high]。
6.递归调用, 快速排序a[p...q-1], a[q+1...r];
/快速排序,部分
public static int partion(int []array,int low,int high){
//以第一个元素为基准
int temp=array[low];
while(high>low){
//从后往前扫描
while(high>low && array[high]>=temp){
high--;
}
array[low]=array[high];
//从前往后扫描
while (high>low && array[low]<=temp){
low++;
}
array[high]=array[low];
}
//循环玩之后,high所指为基准元素所处位置
array[high]=temp;
return high;
}
//快速排序,递归实现
public static void sort(int []array, int low ,int high){
if(low>=high)return;
int p=partion(array,low,high);
sort(array,low,p-1);
sort(array,p+1,high);
}
相关文章推荐
- 算法总结(4)快速排序
- 算法回顾(二):快速排序
- MoreWindows 专注于Windows编程 白话经典算法系列之六 快速排序 快速搞定
- 算法竞赛——快速排序
- 算法系列之六:快速排序
- 算法——快速排序
- 算法:快速排序的Python实现
- 算法题目---快速排序
- 算法学习-1 快速排序
- 快速排序->快速选择算法
- 算法之快速排序
- Java与算法之(2) - 快速排序
- (转)白话经典算法系列之六 快速排序 快速搞定
- 算法 -- 快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- 【经典算法】第一回:快速排序
- 算法详解【快速排序】
- 算法学习~分治法~快速排序
- 白话经典算法系列之六 快速排序 快速搞定
- 坐在马桶上看算法:快速排序