排序算法模板实现示例分享
#include <cstdlib>
#include <iostream>
using namespace std;
#define SELECTSORT 1
#define INSERTSORT 1
#define BUBBLESORT 1
#define SHELLSORT 1
#define QUICKSORT 1
#define MERGESORT 1
template<typename T>
void print(T array[], int len)
{
for (int i=0; i<len; i++) {
cout<<array[i]<<" ";
}
cout<<endl;
}
template<typename T>
void Swap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
#ifdef SELECTSORT
template<typename T>
void SelectSort(T array[], int len)
{
int i = 0;
int j = 0;
int k = -1;
for (i=0; i<len; i++) {
k = i;
for (j=i+1; j<len; j++) {
if (array[j] < array[k]) {
k = j;
}
}
if (k != i) {
swap(array[i], array[k]);
}
}
}
#endif
#ifdef INSERTSORT
template<typename T>
void InsertSort(T array[], int len)
{
int i = 0;
int j = 0;
int k = -1;
int temp = -1;
for (i=1; i<len; i++) {
k = i;
temp = array[k];
for (j=i-1; (j>=0)&&(array[j]>temp); j--) {
array[j+1] = array[j];
k = j;
}
array[k] = temp;
}
}
#endif
#ifdef BUBBLESORT
template<typename T>
void BubbleSort(T array[], int len)
{
int i = 0;
int j = 0;
int exchange = 1;
for (i=0; i<len && exchange; i++) {
exchange = 0;
for (j=len-1; j>0; j--) {
if (array[j] < array[j-1]) {
Swap(array[j], array[j-1]);
exchange = 1;
}
}
}
}
#endif
#ifdef SHELLSORT
template<typename T>
void ShellSort(T array[], int len)
{
int i = 0;
int j = 0;
int k = 0;
int temp = 0;
int gap = len;
do {
gap = gap / 3 + 1;
for (i=gap; i<len; i+=gap) {
k = i;
temp = array[k];
for (j=i-gap; j>=0&&array[j]>temp; j-=gap) {
array[j+gap] = array[j];
k = j;
}
array[k] = temp;
}
} while (gap > 1);
}
#endif
#ifdef QUICKSORT
template<typename T>
int parition(T array[], int low, int high)
{
int pv = array[low];
while (low < high) {
while ((low<high) && (array[high] >= pv)) {
high--;
}
Swap(array[low], array[high]);
while ((low<high) && (array[low] <= pv)) {
low++;
}
Swap(array[low], array[high]);
}
return low;
}
template<typename T>
void QSort(T array[], int low, int high)
{
if (low < high) {
int part = parition(array, low, high);
QSort(array, low, part-1); //可以理解为左边数列
QSort(array, part+1, high); //可以理解为右边数列
}
}
template<typename T>
void QuickSort(T array[], int len)
{
QSort(array, 0, len-1);
}
#endif
#ifdef MERGESORT
template<typename T>
void Merge(T src[], T des[], int low, int mid, int high)
{
int i = low;
int j = mid+1;
int k = low;
while (i<=mid && j<=high) {
if (src[i] < src[j]) {
des[k++] = src[i++];
} else {
des[k++] = src[j++];
}
}
while (i<=mid) {
des[k++] = src[i++];
}
while (j<=high) {
des[k++] = src[j++];
}
}
template<typename T>
void MSort(T src[], T des[], int low, int high, int max)
{
if (low == high) {
des[low] = src[low];
} else {
int mid = (low + high) / 2;
T *space = (T *)malloc(sizeof(T)*max);
if (space != NULL) {
MSort(src, space, low, mid, max);
MSort(src, space, mid+1, high, max);
Merge(space, des, low, mid, high);
}
free(space);
space = NULL;
}
}
template<typename T>
void MergeSort(T array[], int len)
{
MSort(array, array, 0, len-1, len);
}
#endif
上一篇:vc++实现的tcp socket客户端和服务端示例
栏 目:C语言
本文标题:排序算法模板实现示例分享
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3740.html
您可能感兴趣的文章
- 04-02c语言编写函数冒泡排序 c语言冒泡排序法函数
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入第K大数问题以及算法概要的详解
- 01-10深入N皇后问题的两个最高效算法的详解
- 01-10用C++实现DBSCAN聚类算法
- 01-10深入全排列算法及其实现方法
- 01-10大数(高精度数)模板(分享)
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
- 01-10深入理解堆排序及其分析
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11ajax实现页面的局部加载
- 01-10C#中split用法实例总结