排序算法分析
![这里写图片描述](https://img-blog.csdn.net/20160820142427679)
/*交换*/
template <typename T>
void _swap(T &a,T &b) {
T temp=a;
a=b;
b=temp;
}
/* 冒泡排序:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序 */
template <typename T>
void bubbleSort(T *arr,int len) {
for (int i=0; i<len-1; i++) {
for (int j=0; j<len-1-i; j++) {
if (arr[j]>arr[j+1]) {
_swap(arr[j], arr[j+1]);
}
}
}
}
template <typename T>
void insertSort(T *arr,int len) {
int i,j;
for (i=1; i<len; i++) {
j=i;
while (j>0 && arr[j-1]>arr[j]) {
_swap(arr[j], arr[j-1]);
j--;
}
}
}
template <typename T>
void selectionSort(T *arr,int len) {
for (int i=0; i<len-1; i++) {
int index = i;
for (int j=i+1; j<len; j++) {
if (arr[j]<arr[index]) {
index=j;
}
}
if (index != i)
_swap(arr[index], arr[i]);
}
}
template <typename T>
T partition(T *arr,int i,int j) {
int pivot =arr[j],small =i-1;
for(int k=i;k<j;k++) {
if(arr[k] <= pivot) {
small++;
_swap(arr[k],arr[small]);
}
}
swap(arr[j],arr[small+1]);
return small+1;
}
template <typename T>
void quickSort(T *arr,int i,int j) {
if (i<j) {
int pos = partition(arr,i,j);
quickSort(arr,i,pos-1);
quickSort(arr,pos+1,j);
}
}