排序源码(待续)

#include <stdio.h>
void exchange(int &a,int &b){
    a = a^b;
    b = a^b;
    a = a^b;
}

void printout(int a[],int n){
    for(int i=0;i<n;i++){
        printf("%5d ",a[i]);
    }
}

//直接选择排序
void selectSort(int a[],int n){
    int i,j;
    for(i=0;i<n;i++){
        for(j=i+1;j<n;j++){
            if(a[i]>a[j]){
                exchange(a[i],a[j]);
            }
        }
    }
    printout(a,n);
}

//冒泡排序
void bubbleSort(int a[],int n){
    int i,j;
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]>a[j+1]){
                exchange(a[j],a[j+1]);
            }
        }

    }
    printout(a,n);
}






//建大顶堆
void heapAdjust(int a[],int s,int l){
    int tag = s; //保存当前正在比较的父节点
    for(int j=2*s+1;j<=l;j = 2*j+1){
        if(j<l && a[j]<a[j+1]){
            j++;
        }
        if(a[tag] < a[j]){
            exchange(a[tag],a[j]);
            tag = j;
        }else{
            break;
        }
    }

}

//堆排序
void heapSort(int a[],int n){
    int i;
    //建大顶堆
    for(i=((n-2)>>1);i>=0;i--){
        heapAdjust(a,i,n-1);
    }

    //进行堆排序,并每次将堆节点放到最后一位,即将当前堆最大值放到最后
    for(i=n-1;i>0;--i){
        exchange(a[0],a[i]);
        heapAdjust(a,0,i-1);
    }
    printout(a,n);
}

//快速排序
void subSort(int a[],int low,int high){

    int temp = a[low];
    int i=low,j=high;
    if(i<j){

    while(true){
        while(i < j && a[j]>=temp){
            j--;
        }
        while(i < j && a[i]<=temp){
            i++;
        }
        if(i<j)
            exchange(a[i],a[j]);
        else
            break;
    }

    exchange(a[low],a[i]);

    subSort(a,low,i-1);
    subSort(a,i+1,high);

    }
}

void quickSort(int a[],int n){
    subSort(a,0,n-1);
    printout(a,n);
}

int main()
{
    int a[] ={3,1,2,9,5};
   // selectSort(a,3);
    printout(a,5);
    printf("\ntest:");
    //bubbleSort(a,3);
    // heapSort(a,6);
    quickSort(a,5);
    return 0;
}

posted @ 2013-04-13 01:38  mapleyuan  阅读(146)  评论(0编辑  收藏  举报