#include <iostream>
using namespace std;
class sort
{
private:
template <typename T>
static void swap(T& a, T& b)
{
T tmp = a;
a = b;
b = tmp;
}
public:
template <typename T>
static void select(T arr[], int len, bool min2max=true)
{
for(int i=0; i<len; i++)
{
int min = i;
for(int j=i+1; j<len; j++)
{
if(min2max ? arr[min]>arr[j] : arr[min]<arr[j])
{
min = j;
}
}
if(min != i)
{
swap(arr[min], arr[i]);
}
}
}
template <typename T>
static void insert(T arr[], int len, bool min2max=true)
{
for(int i=1; i<len; i++)
{
int k=i;
T e = arr[i];
for(int j=i-1; j>=0; j--)
{
if(min2max ? arr[j]> e : arr[j] < e)
{
arr[j+1] = arr[j];
k = j;
}
}
if(k != i)
{
arr[k] = e;
}
}
}
template <typename T>
static void bubble(T arr[], int len, bool min2max=true)
{
bool exchange = true;
for(int i=0; i<len && exchange; i++)
{
exchange = false;
for(int j=len-1; j>i; j--)
{
if(min2max ? arr[j-1] > arr[j] : arr[j-1] < arr[j])
{
swap(arr[j-1], arr[j]);
exchange = true;
}
}
}
}
template <typename T>
static void shell(T arr[], int len, bool min2max=true)
{
int d = len;
do
{
d = d/3 + 1;
for(int i=d; i<len; i+=d)
{
T e = arr[i];
int k = i;
for(int j=i-d; j>=0; j-=d)
{
if(min2max ? arr[j] > e : arr[j] < e)
{
arr[j+d] = arr[j];
k = j;
}
}
if(k!=i)
{
arr[k] = e;
}
}
}while(d > 1);
}
};
int main(void)
{
int arr[] = {4,1,3,9,2,6,0,88,167};
int len = sizeof(arr)/sizeof(int);
cout << "len: " << len << endl;
sort::select(arr, len);
//sort::insert(arr, len);
//sort::bubble(arr, len);
//sort::shell(arr, len);
for(int i=0; i<len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
输出: