// jisuan.cpp : Defines the entry point for the console application. // #include "stdafx.h" //#include <stddef.h> #include <iostream> usingnamespace std; template<class T> void Rank(T a[], int n, int r[]) ...{ for( int i =0; i < n; i++) for(int j =0; j < i; j++) if(a[j] < a[i]) r[i]++; else r[j]++; } template<class T> void Rearrange(T a[], int n, int r[]) ...{ T* u =new T[n+1]; for(int i =0; i < n; i++) u[r[i]] = a[i]; for( i =0; i < n; i++) a[i] = u[i]; delete []u; } int main(int argc, char* argv[]) ...{ int a[] =...{47,78,4,56,8,9}; constint b =sizeof(a)/sizeof(&a[0]); int r[b] =...{0}; cout<<b<<endl; Rank(a, 6, r); Rearrange(a, 6, r); for(int i =0; i <6; i++) cout<<a[i]<<endl; return0; }
第二种方法:
// rearrange.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> usingnamespace std; template<class T> void Swap(T& x, T& y) ......{ T temp = x; x = y; y = temp; } template<class T> void Rank(T a[], int n, int r[]) ......{ for( int i =0; i < n; i++)//对i 前的每个元素与第i 个元素相比较 for(int j =0; j < i; j++) if(a[j] < a[i]) r[i]++; else r[j]++; } template<class T> void Rearrange(T a[], int n, int r[]) ......{ for(int i =0; i < n; i++) while(r[i] != i)//这种交换操作在位置i处重复下去 ......{ //直到应该排在位置i的元素被交换到i处 int t = r[i]; Swap(a[i], a[t]); Swap(r[i], r[t]); } } int main(int argc, char* argv[]) ......{ int a[] = ......{47,78,4,56,8,9}; constint b =sizeof(a)/sizeof(&a[0]); int r[b] = ......{0}; Rank(a, 6, r); Rearrange(a, 6, r); for(int i =0; i <6; i++) cout<<a[i]<<endl; return0; }