您的位置:首页 > 其它

算法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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: