目标:将元素从小到大排列
算法原理:遍历所有元素,选择最小的元素与第一个元素交换位置,遍历剩余元素,选择最小的元素与第二个元素交换位置,循环直道最后一个元素。
时间复杂度:O(n^2)
c++实现整形数组选择排序
1 void selectSort( int arr[] , int n ) 2 { 3 for(int i=0 ; i < n ; i++) 4 { 5 int minIndex=i; 6 for(int j=i; j< n;j++) 7 { 8 if(arr[j]<arr[minIndex]) 9 minIndex=j; 10 } 11 swap(arr[i],arr[minIndex]); 12 } 13 return; 14 }
在第一层循环内定义了辅助变量minIndex,赋值为i。swap()为交换函数,包含在名字空间std中。
为了提高通用型,将函数改写为函数模板
1 template <typename T> 2 void selectSort( T arr[] , int n ) 3 { 4 for(int i=0 ; i < n ; i++) 5 { 6 int minIndex=i; 7 for(int j=i; j< n;j++) 8 { 9 if(arr[j]<arr[minIndex]) 10 minIndex=j; 11 } 12 swap(arr[i],arr[minIndex]); 13 } 14 return; 15 }
函数模板有局限性,所以在具体使用的时候,有时需要进行运算符重载等操作