冒泡排序第一个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;
}
}
}
希尔排序不完整的表述(希望不要介意,字太丑!!!)