C++九种排序具体实现代码
本文内容会根据博主所需进行更新,希望大家多多关照。
直接插入排序
voidInsertSort(intr[])
{
intn=sizeof(r)/sizeof(r[0]);
for(inti=1;i=0;--j)
{
if(r[j+1]
折半插入排序
voidBinInsertSort(intr[])
{
intn=sizeof(r)/sizeof(r[0]);
for(inti=1;i=high+1;--j)//high+1即mid,执行数的后移,直到mid的数后移
r[j+1]=r[j];
r[high+1]=s;//mid位置就存放本身
}
}
希尔排序
voidShellSort(intr[])
{
intn=sizeof(r)/sizeof(r[0]);
intstep=n/2;
while(step>=1)
{
for(inti=step;i=0;j-=step)
{
if(r[j+step]
直接选择排序
voidSelectSort(intr[])
{
intn=sizeof(r)/sizeof(r[0]);
for(inti=0;ir[j])
samll=j;
}
if(small!=i)
{
ints=r[i];
r[i]=r[small];
r[small]=s;
}
}
}
堆排序
voidHeapAdjust(intr[];inti;intj)//调整堆
{
intchild=2*i;
ints=r[i];//s临时存放结点数据
while(child<=j)
{
if(childr[child])//比较2个子树
++child;
if(s>=r[child])//结点与大子树比较
break;
r[child/2]=r[child];//如果大子树比结点大,互换
child=2*child;//继续向子树检索
}
r[child/2]=s;//结点的数为最大的数
}
voidHeapSort(intr[])//建堆
{
intn=sizeof(r)/sizeof(r[0]);
for(inti=n/2-1;i>=0;--i)//只有n/2-1前的下标才有子树
{
HeapAdjust(r,i,n-1);//构造大顶堆,结点都比子树大,最后根节点为最大的数
}
for(inti=n-1;i>0;--i)
{
//将当前堆顶元素与当前堆尾元素互换,即将最大的数移到末尾
ints=r[0];
r[0]=r[i];
r[i]=s;
HeapAdjust(r,0,i-1);//将剩下的元素继续调整,最后变成由小到大的顺序
}
}
冒泡排序
voidBubbleSort(intr[])
{
intn=sizeof(r)/sizeof(r[0]);
for(inti=0;ir[j+1])
{
ints=r[j];
r[j]=r[j+1];
r[j+1]=s;
}
}
}
}
快速排序
intPartition(intr[],intlow,inthigh)
{
intpivotkey=r[low];
inti=low;
intj=high;
while(ipivotkey)//从j往前找,找出第一个比pivotkey小的数
--j;
if(i
归并排序
voidcopyArray(intsource[],intdest[],intlen,intfirst)
{
inti;
intj=first;
for(i=0;i
桶排序
voidinsert(list&bucket,intval)
{
autoiter=bucket.begin();
while(iter!=bucket.end()&&val>=*iter)
++iter;
//insert会在iter之前插入数据,这样可以稳定排序
bucket.insert(iter,val);
}
voidBuckdeSort(vector&arr)
{
intlen=arr.size();
if(len<=1)
return;
intmin=arr[0],max=min;
for(inti=1;iarr[i])
min=arr[i];
if(max>buckets(bucketsNum);
for(inti=0;i
到此这篇关于C++九种排序具体实现代码的文章就介绍到这了,更多相关C++排序内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。