/*几种常用的排序算法*/
/*算法名称: 冒泡排序
*复杂度:O(n^2)
*参数说明:
*--start:起始地址
×--end:结束地址*/
template <class T>
void BubbleSort(T *start, T *end){
for (T *i = end - 1; i > start; i--)
for (T *j = start; j < i; j++)
if (*j > *(j + 1)){
T tmp = *j;
*j = *(j + 1);
*(j + 1) = tmp;
}
}
/*算法名称: 选择排序
*复杂度:O(n^2) */
template <class T>
void SelectionSort(T *start, T *end){
for (int *i = start; i < end - 1; i++)
for (int *j = i + 1; j < end; j++)
if (*i > *j){
T tmp = *i;
*i = *j;
*j = tmp;
}
}
/*算法名称: 归并排序
*复杂度:O(n^log2n)
*参数说明:
*--buf:进行归并时的零时数组*/
template <class T>
void MergeSort(T *start, T *end, T buf[]){
if (start < end - 1){
int p = (end - start) / 2;
MergeSort(start, start + p, buf);
MergeSort(start + p, end, buf);
T *l = start, *r = start + p;
for (int i = 0; i < end - start; i++){
if (l < start + p && r < end){
if (*l < *r)
buf[i] = *l++;
else
buf[i] = *r++;
}else{
if (l < start + p) buf[i] = *l++;
else buf[i] = *r++;
}
}
for (int i = 0; i < end - start; i++)
start[i] = buf[i];
}
}
/*算法名称: 快速排序
*复杂度:O(n^2) (最坏情况)*/
template <class T>
void QuickSort(T *start, T *end){
if (start < end - 1){
T x = *start;
T *pi = start, *pj = end;
while (true){
while (x > *++pi);
while (x < *--pj);
if (pi >= pj) break;
T tmp = *pi;
*pi = *pj;
*pj = tmp;
}
*start = *pj;
*pj = x;
QuickSort(start, pj);
QuickSort(pj + 1, end);
}
}
分享到:
相关推荐
一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序
几种常见的排序算法代码,附有其效率及分析
几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 Insertion...
几种常见排序算法JAVA实现.pdf
常见的几种排序算法的实现:选择排序、插入排序、冒泡排序、希尔排序、快速排序、归并排序。包括实现与局测试。
几种常见排序算法(JAVA实现).pdf
上述资源是位与、选择、冒泡、插入、qsort算法的实例,在vc6.0下可以编译并得到预期结果。
包括冒泡排序,选择排序,插入排序,希尔排序,快速排序等常用排序算法的实现并耗时比较
数据结构中几种常见的排序算法之比较,比较常见的冒泡排序、快速排序等
用Java实现几种常见的排序算法.txt
在这里提供几种常见排序算法的源代码,供大家参考,如有错误,请指出来,谢谢!
最常见的几种排序算法 网页形式的,忘记什么时候找的了
几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
这是几种常见的排序算法,我是用C语言编写的,而且代码都是经过我亲自认证的,保证没有什么问题!希望需要的宅男宅女们可以用到!
java 几种常用的排序算法 java 几种常用的排序算法
Java几种常见的排序算法
用Java实现几种常见的排序算法.txt
对各种排序算法的一个总结,分析了几种常用算法的思想和实现过程。