#include <cstdlib>#include <iostream>#include <cassert>using namespace std;/**//* output array elements */template <class T>void Print(const T *in, int n)...{ for (int i = 0; i < n; i++) ...{ cout << in[i] << " "; } cout << endl;}template <class T>void Exch2Item(T &item1, T &item2)...{ T temp = item1; item1 = item2; item2 = temp;};/**//* bubble sort algorithm */template <class T>void BubbleSort(T *input, int n)...{ assert(input != NULL); for (int i = 0; i < n-1; i++) ...{ for (int j = 0; j < (n - i - 1) ; j++) ...{ if (input[j] > input[j + 1]) ...{ Exch2Item(input[j], input[j + 1]); } } }}/**//* select sort algorithm */template <class T>void SelectSort(T *input, int n)...{ assert(input != NULL); for (int i = 0; i < n-1; i++) ...{ for (int j = i + 1; j < n; j++) ...{ if (input[i] > input[j]) ...{ Exch2Item(input[j], input[i]); } } }}/**//* common insert sort algorithm */template <class T>void InsertSort(T *input, int n)...{ T temp; for (int i = 1; i < n; i++) ...{ temp = input[i]; for (int j = 0; j < i; j++) ...{ if (input[j] > temp) ...{ break; } } for (int k = i; k >= j+1; k--) ...{ input[k] = input[k - 1]; } input[j] = temp; }}/**//* binary insert sort algorithm */template <class T>void BInsertSort(T *input, int n)...{ T temp; int l, r, mid, k; for (int i = 1; i < n; i++) ...{ temp = input[i]; l = 0; r = i - 1; while (l <= r) ...{ mid = (l + r) / 2; if (input[mid] < temp) ...{ l = mid +1; } else if (input[mid] > temp) ...{ r = mid -1; } else ...{ k = mid; break; } } /**//* now l is the place to insert, move forward the elements between l and i*/ for (int j = i; j >= l+1; j--) ...{ input[j] = input[j - 1]; } input[l] = temp; }}int main(int argc, char *argv[])...{ int a[] = ...{12, 43, 1, 3, 5, 2, 7, 8, 0, 4, 89}; printf("%d ", sizeof(a)); BubbleSort(a, sizeof(a)/sizeof(int)); SelectSort(a, sizeof(a)/sizeof(int)); BInsertSort(a, sizeof(a)/sizeof(int)); Print(a, sizeof(a)/sizeof(int)); return 0;}