129 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * Bubble sort some lists by exploiting templates
 | 
						|
 *
 | 
						|
 */
 | 
						|
#include <iostream>
 | 
						|
#include <cstring>
 | 
						|
 | 
						|
 | 
						|
#define LIST_SIZE 10
 | 
						|
template<class T>
 | 
						|
void display( T t[], int n );
 | 
						|
 | 
						|
template<class T>
 | 
						|
void sort( T* A, const int size );
 | 
						|
 | 
						|
template<class T>
 | 
						|
void order( T& a, T& b );
 | 
						|
 | 
						|
 | 
						|
int main() {
 | 
						|
	int list[LIST_SIZE] = { 2295, 14500, 9127, 23079, 20612, 5571, 21959, 10032, 18339, 16673 };
 | 
						|
	float flist[LIST_SIZE] = { 835.2, 3248.8, 0.1213123, 8.234234, 8242.25823, 802348234.8, .9123812414, 0.00000001, 842, 10000000 };
 | 
						|
	const char* clist[LIST_SIZE] = { 
 | 
						|
		"b", 
 | 
						|
		"cccccccccc", 
 | 
						|
		"aaabcd", 
 | 
						|
		"axefsaf", 
 | 
						|
		"poqkud", 
 | 
						|
		"6xnj439yu", 
 | 
						|
		"nullieksj", 
 | 
						|
		"bell", 
 | 
						|
		"uuisdjk",
 | 
						|
		"aaaaaaa", 
 | 
						|
	};
 | 
						|
 | 
						|
	// Print the original
 | 
						|
	std::cout << "Original: ";
 | 
						|
	display(list, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
	// sort it
 | 
						|
	sort( list, LIST_SIZE );
 | 
						|
 | 
						|
	// Print it
 | 
						|
	std::cout << "Sorted: ";
 | 
						|
	display(list, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
 | 
						|
	// Doing Floats
 | 
						|
 | 
						|
	// Print the original
 | 
						|
	std::cout << "Original: ";
 | 
						|
	display(flist, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
	// sort it
 | 
						|
	sort( flist, LIST_SIZE );
 | 
						|
 | 
						|
	// Print it
 | 
						|
	std::cout << "Sorted: ";
 | 
						|
	display(flist, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
 | 
						|
	// Doing Chars
 | 
						|
 | 
						|
 | 
						|
	// Print the original
 | 
						|
	std::cout << "Original: ";
 | 
						|
	display(clist, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
	// sort it
 | 
						|
	sort( clist, LIST_SIZE );
 | 
						|
 | 
						|
	// Print it
 | 
						|
	std::cout << "Sorted: ";
 | 
						|
	display(clist, LIST_SIZE);
 | 
						|
	std::cout << std::endl;
 | 
						|
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
template<class T>
 | 
						|
void display( T t[], int n) {
 | 
						|
	for( int i = 0; i < n ; i++ )
 | 
						|
	{
 | 
						|
		if ( i != 0 )
 | 
						|
		{
 | 
						|
			std::cout << ", ";
 | 
						|
		}
 | 
						|
 | 
						|
		std::cout << t[i];
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
template<class T>
 | 
						|
void sort( T* A, const int size ) {
 | 
						|
	for (int i = 0 ; i < size ; i++ ) {
 | 
						|
		for (int j = 0 ; j < size - 1 ; j++) {
 | 
						|
			order( A[ i ], A[ j ] );
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
template<class T>
 | 
						|
void order( T& a, T& b ) {
 | 
						|
	// b is greater or equal to a, do nothing
 | 
						|
	if ( a < b ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	
 | 
						|
	T tmp = a;
 | 
						|
	a = b;
 | 
						|
	b = tmp;
 | 
						|
}
 | 
						|
 | 
						|
template<>
 | 
						|
void order( const char* &a, const char* &b ) {
 | 
						|
	if ( strcmp(a, b) <= 0 ) {
 | 
						|
		return ;
 | 
						|
	}
 | 
						|
 | 
						|
	const char* tmp = a;
 | 
						|
	a = b;
 | 
						|
	b = tmp;
 | 
						|
}
 |