C++常用经典算法及其实现

--

一、快速排序

void qsort(int x,int y) // 待排序的数据存放在

a[1]..a[n]

数组中

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

{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

n-1 for(int j=1;j<=n-i;j++) //

相邻的两两比较

if(a[j]

} 或者

void paopao(void) //

待排序的数据存放在 a[1]..a[n]

数组中

----

次冒泡

--

{for(int

// 控制循环(冒泡)的次n 个数,需n-次冒泡i=1;i

1

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]

过 while (tong[i]!=0) {tong[i]--; cout<

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

四、合(归)并排序

void merge(int l,int 合并 和

两个已经有序的区间m,int r)//

[l,m]

[m+1,r]

----

i

--

{ int

b[101];// 大小要注意

借助一个新的数

B,使两个有序的子区间合并成一个有序的区间,

b 数组的

----

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4