#include <iostream> #include "Array.cpp" using namespace std; template <class DataType> void InsertSort(Array<DataType> &arr); void main() { int num; cin>>num; Array<int> arr(num); for (int i=0;i<arr.length();i++) { cin>>arr[i]; } InsertSort(arr); for (int j=0;j<arr.length();j++) { cout<<arr[j]<<" "; } cout<<endl; } template <class DataType> void InsertSort(Array<DataType> &arr) { DataType temp; int i=0; for (int j=1;j<arr.length();j++) { i=j-1; temp=arr[j]; while (i>=0 && arr[i]>temp) { arr[i+1]=arr[i]; i--; } arr[i+1]=temp; } } #include <iostream> #include "Array.cpp" using namespace std; /* 分区函数 arr:数组 p:第一个元素索引 r:最后一个元素索引 */ template <class DataType> int partition(Array<DataType> & arr,int p,int r); template <class DataType> void QuickSort(Array<DataType> & arr,int p,int r); void main() { int num=0; cin>>num; Array<int> arr(num); for (int i=0;i<arr.length();i++) { cin>>arr[i]; } QuickSort(arr,0,arr.length()-1); for (int j=0;j<arr.length();j++) { cout<<arr[j]<<" "; } cout<<endl; } template <class DataType> int partition(Array<DataType> & arr,int p,int r) { int i=p-1; DataType temp; for (int j=p;j<r;j++) { if (arr[j]<=arr[r]) { i++; temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } temp=arr[r]; arr[r]=arr[i+1]; arr[i+1]=temp; return i+1; } template <class DataType> void QuickSort(Array<DataType> & arr,int p,int r) { if (p<r) { int q=partition(arr,p,r); //q可以在外定义以减少递归内存消耗 QuickSort(arr,p,q-1); QuickSort(arr,q+1,r); } } #include <iostream> #include "Array.cpp" using namespace std; template <class DataType> void CountSort(Array<DataType> & arr); void main() { int num=0; cin>>num; Array<int> arr(num); for (int i=0;i<arr.length();i++) { cin>>arr[i]; } CountSort(arr); for (int j=0;j<arr.length();j++) { cout<<arr[j]<<" "; } cout<<endl; } template <class DataType> void CountSort(Array<DataType> & arr) { DataType max=arr[0],min=arr[0]; for (int i=0;i<arr.length();i++) { if (arr[i]>max) { max=arr[i]; } if (min>arr[i]) { min=arr[i]; } } DataType k=max-min; Array<int> brr(k+1); for (int j=0;j<=k;j++) { brr[j]=0; } for (int z=0;z<arr.length();z++) { brr[arr[z]-min]++; } int p=0; for (int m=0;m<=k;m++) { for (int n=brr[m];n>0;n--) { arr[p]=m+min; p++; } } }