希尔,快速,选择,冒泡排序

冒泡排序第一个for循环确定趟数,第二个for循环确定每一趟进行比较的数

void popSort(int *p,int n)
{
for(int i=0;i<n-1;i++)
{
    for(int j=0;j<n-1-i;j++)
    {
        if(p[j]>p[j+1])
        {
            p[j]^=p[j+1];
            p[j+1]^=p[j];
              p[j]^=p[j+1];
        }

    }
}
}


//选择排序,敌不动我动,敌动我也动  
//敌相当于第一个for循环,“我”相当于第二个循环
void selectSort(int *p,int n)
{
for(int i=0;i<n-1;i++)
{
    for(int j=i+1;j<n;j++)
    {
       if(p[i]>p[j])
       {
                   p[i]^=p[j];
                   p[j]^=p[i];
                   p[i]^=p[j];

       }
    }

}
}

快速排序,时间短,采用递归方式

void quickSort(int *p,int low,int high)
{
    if(low<high)
 {
        int l=low;int h=high;
        int tmp=p[low];
        while(l<h)
        {
            while(p[h]>=tmp&&l<h)
                h--;
            p[l]=p[h];
            while(p[l]<=tmp&&l<h)
                l++;
            p[h]=p[l];
        }
        p[l]=tmp;
        quickSort(p,low,h-1);
        quickSort(p,h+1,high);

    }

}

希尔排序,实际上也一种插入排序,再进行完分组,对组内元素和组外元素进行插入

void shellSort(int *p,int n)
{   int d;//增量值 元素个数的一半
   /*开始时增量值是元素个数的一半,
    * 之后增量值每次都是原来的增量值的一半,
    * 直到增量值为1,退出循环*/
    for(d=n/2;d>=1;d=d/2)
    {
        //分组完成之后进行插入排序
        for(int i=d;i<n;i++)//将后半元素插入前半元素中
        {
            int tmp=p[i];
            //将这个数插入前d-1个数组
            int j;
            for(j=i-d;j>=0&&p[j]>tmp;j=j-d)//选择位置插入
            {
               p[j+d]=p[j];
            }![在这里插入图片描述](https://img-blog.csdnimg.cn/20181225164912568.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMzQ1MTA3,size_16,color_FFFFFF,t_70)
            p[j+d]=tmp;

        }

    }


}

希尔排序不完整的表述(希望不要介意,字太丑!!!)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40345107/article/details/85250665