各种排序

来源:互联网 发布:sql stuff用法 编辑:程序博客网 时间:2024/05/16 00:59
#include<iostream>using namespace std;//直接插入排序void Insert(int *arr, int len){    for(int i=0;i<len-1;++i)    {        if(arr[i+1]<arr[i])        {            int k=i;            int tep = arr[i+1];            while(arr[k]>tep && k>=0)            {                arr[k+1] = arr[k];                k--;            }            arr[k+1]  =tep;        }    }}void show(int *arr, int len){    for(int i=0;i<len;++i)    {        cout<<arr[i]<<' ';    }    cout<<endl;}//希尔排序void Shell(int *arr , int len, int d){    for(int i=d;i<len;i++)    {        if(arr[i]<arr[i-d])        {            int tep= arr[i];            arr[i] = arr[i-d];            arr[i-d] = tep;        }    }}//冒泡排序void Pop(int *arr , int len){    if(arr==NULL)    {        return ;    }    for(int j=1;j<len;j++)    {        int flg=0;        for(int i=0;i<len-1;++i)        {            if(arr[i]>arr[i+1])            {                int tep = arr[i];                arr[i] = arr[i+1];                arr[i+1] = tep;                flg=1;            }        }        if(flg==0)        {            break;        }    }}//双向冒泡排序void Doupop(int *arr , int len){    if(arr == NULL)    {        return;    }    int swap=1;    for(int i=1; swap!=0; ++i)    {        swap=0;        for(int j=i;j<len;++j)        {            if(arr[j-1]>arr[j])            {                int tep = arr[j];                arr[j] = arr[j-1];                arr[j-1] = tep;                swap=1;            }        }        for(int j=len-i; j>=0; j--)        {            if(arr[j]<arr[j-1])            {                int tep = arr[j];                arr[j] = arr[j-1];                arr[j-1] = tep;            }        }    }}//快速排序int  Partion(int *arr , int beg, int end){    int tep = arr[beg];    while(beg<end)    {        while(beg<end && arr[end]>=tep)        {            end--;        }        if(beg<end)        {            arr[beg] = arr[end];            beg++;        }        while(beg<end&& arr[beg]<=tep)        {            beg++;        }        if(beg<end)        {            arr[end] = arr[beg];            end--;        }    }    arr[beg] = tep;    return beg;}void QuitSort(int *arr , int beg, int end){    if(arr==NULL)    {        return ;    }    int i;    if(beg<end)    {        i = Partion(arr , beg, end);        QuitSort(arr , beg , i-1);        QuitSort(arr , i+1,end);    }}//直接选择排序void SelectSort(int *arr , int n){    int min;    int k;    for(int i=0;i<n-1;++i)    {        min = arr[i];        for(int j=i+1;j<n;++j)        {            if(arr[j]<min)            {                min = arr[j];                k=j;            }        }        if(k!=i)        {            int tep = arr[i];            arr[i] = arr[k];            arr[k] = tep;        }    }}//堆排序学习的是海子老师的算法;void HeapAdjust(int *a,int i,int size)  //调整堆 {    int lchild=2*i;       //i的左孩子节点序号     int rchild=2*i+1;     //i的右孩子节点序号     int max=i;            //临时变量     if(i<=size/2)          //如果i是叶节点就不用进行调整     {        if(lchild<=size&&a[lchild]>a[max])        {            max=lchild;        }        if(rchild<=size && a[rchild]>a[max])        {            max=rchild;        }        if(max!=i )        {            swap(a[i],a[max]);            if(max<size/2)            {                HeapAdjust(a,max,size);    //避免调整之后以max为父节点的子树不是堆             }        }    }}void BuildHeap(int *a,int size)    //建立堆 {    int i;    for(i=size/2;i>0;i--)    //非叶节点最大序号值为size/2     {        HeapAdjust(a,i,size);        }    } void HeapSort(int *a,int size)    //堆排序 {    int i;    BuildHeap(a,size);    for(i=size;i>=1;i--)    {        //cout<<a[1]<<" ";        swap(a[1],a[i]);           //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面         //BuildHeap(a,i-1);        //将余下元素重新建立为大顶堆         HeapAdjust(a,1,i-1);      //重新调整堆顶节点成为大顶堆    }} int main(){    int arr[] = {-1,9,8,7,6,5,4,3,2,1,0};    int len =  sizeof(arr)/sizeof(arr[0]);    /*cout<<len<<endl;    Insert(arr , len);    show(arr,len);    cout<<endl;    for(int i=4;i>=0;i--)    {    Shell(arr, len , i);    }    show(arr, len);    Pop(arr , len);    Doupop(arr , len);    QuitSort(arr , 0, len-1);    SelectSort(arr , len);*/    HeapSort(arr , len-1);    show(arr, len);    return 0;}
1 0
原创粉丝点击