2024年4月14日发(作者:)

常用算法经典代码(C++版)

一、快速排序

void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中

{int h=x,r=y;

int m=a[(x+y)>>1]; //取中间的那个位置的值

while(h

{while (a[h]

while (a[r]>m) r--; //比中间那个位置的值大,循环直到找一个比中间那个值小的

if(h<=r)

{int temp=a[h];//如果此时h<=r,交换a[h]和a[r]

a[h]=a[r];

a[r]=temp;

h++;r--; //这两句必不可少哦

}

}

if(r>x) qsort(x,r);//注意此处,尾指针跑到前半部分了

if(h

}

调用:qsort(1,n)即可实现数组a中元素有序。适用于n比较大的排序

二、冒泡排序

void paopao(void) //待排序的数据存放在a[1]..a[n]数组中

{for(int i=1;i

for(int j=1;j<=n-i;j++) //相邻的两两比较

if(a[j]

}

或者

void paopao(void) //待排序的数据存放在a[1]..a[n]数组中

{for(int i=1;i

for(int j=n-i;j>=1;j--) //相邻的两两比较

if(a[j]

}

调用:paopao(),适用于n比较小的排序

三、桶排序

void bucketsort(void)//a的取值范围已知。如a<=cmax。

{memset(tong,0,sizeof(tong));//桶初始化

for(int i=1;i<=n;i++)//读入n个数

{int a

cin>>a;

tong[a]++;}//相应的桶号计数器加1

for(int i=1;i<=cmax;i++)

{if(tong[i]>0) //当桶中装的树大于0,说明i出现过tong[i]次,否则没出现过i

while (tong[i]!=0)

{tong[i]--;

cout<

}

}

桶排序适用于那些待排序的关键字的值在已知范围的排序。

四、合(归)并排序

void merge(int l,int m,int r)//合并[l,m]和[m+1,r]两个已经有序的区间

{ int b[101];//借助一个新的数组B,使两个有序的子区间合并成一个有序的区间,b数组的

大小要注意

int h,t,k;

k=0;//用于新数组B的指针