--
一、快速排序
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 数组的 ----