快速排序其实可看成每次通过比较获得基准值privot所处的位置,这个可以看作是划分。因为划分复杂,所以合并简单,合并就直接不用做,因为划分时,将每个元素最终的位置都固定。
斜体样式
quickSort:
public class QuickSort{
public static void sort(int[] a, int i, intj){
if(i>=j) return;
int low=i;
int high=j;
int privot=a[i];
while(low<high){
while(low<high&&a[high]>=privot) high--;
a[low]=a[high];
while(low<high&&a[low]<=privot) low++;
a[high]=a[low];
}
a[low]=privot;
sort(a,i,low-1);
sort(a,low+1,j);
}
public static void quickSort(int[] a){2
sort(a,0,a.length-1)
}
public static void main(String[] args){
int[] a={5,4,6,9,7,1,3,2};
quickSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]+" ");
}
}
}
归并排序:分而治之
先从中间一分为二 一直划分到单个节点
然后将相邻区间元素合并
public class MergeSort{
public static void merge(int[] a, int p, int q, int r){
int n1=q-p+1;
int n2=r-q;
int i=0,j=0,k=0;
int[] L=new int[n1];
int[] R=new int[n2];
for(i=0,k=p;i<n1;i++,k++ ){
L[i]=a[k];
}
for(j=0,k=q+1;j<n2;j++,k++){
R[j]=a[k];
}
for(i=0,j=0,k=p;i<n1&&j<n2;k++){
if(L[i]<R[j]){
a[k]=L[i];
i++;
}else{
a[k]=R[j];
j++;
}
}
if(i<n1){
while(i<n1){
a[k]=L[i];
i++;
k++;
}
}
if(j<n2){
while(j<n2){
a[k]=R[j];
j++;
k++;
}
}
}
public static void mergeSort(int[] a, int p, int r){
if(p<r){
int q=(p+r)/2;
mergeSort(a, p,q);
mergeSort(a,q+1,r);
merge(a,p,q,r);
}
}
public static void main(String[] args){
int[] a = {5,4,8,9,7,6,1,3,2};
mergeSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]+" ");
}
}
}
堆排序:
思路:数组看成是一个完全二叉树的顺序存储结构
从最后一个非叶子节点(len/2-1)开始向下调整,–》形成一个大顶堆(小顶堆)
然后将堆中最后一个元素与第一个元素互换,再从根节点开始调用向下调整,只不过长度减1, 每次互换之后 都能够获得一个最大值 从而实现最后的排序
public class HeapSort{
public static void adjustMaxHeap(int[] a,int pos, int len){
int temp=a[pos];
int child=0;
for(child=2*pos+1;child<=len;pos=child){
if(child<len&&a[child+1]>a[child]){
child++;
}
if(a[child]>a[temp]){
a[pos]=a[child];
}
}
a[pos]=temp;
}
public static void heapSort(int[] a){
int len = a.length;
for(int i=len/2-1;i>=0;i--){
adjustMaxHeap(a,i,len-1);
}
for(int i=len-1;i>=0;i--){
int tmp=a[i];
a[i]=a[0];
a[0]=temp;
adjustMaxHeap(a,0,i-1);
}
}
public static void main(String[] args){
int [] a={23,45,12,9,10,1};
heapSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]+" "``);
}
}
}