前言
需求 :通过一个通用排序函数 实现对char和int数组的排序,排序顺序 从大到小, 算法 选择排序
一、程序及输出
#include<iostream>
using namespace std;
template <class T>
void mySwap(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
//需求 通过一个通用排序函数 实现对char和int数组的排序,排序顺序 从大到小, 算法 选择排序
template< class T > //typename 和 class 一样
void mySort( T arr[] , int len)
{
for (int i = 0; i < len;i++)
{
int max = i;
for (int j = i + 1; j < len;j++)
{
if (arr[max] < arr[j])
{
max = j;
}
}
//判断 算出的max和开始认定的i是否一致,如果不同交换数据
if (i != max)
{
mySwap(arr[i], arr[max]);
}
}
}
template<class T>
void printArray(T arr[] , int len)
{
for (int i = 0; i < len;i++)
{
cout << arr[i] << endl;
}
}
void test01()
{
char charArray[] = "helloworld";
int len = strlen(charArray);
mySort(charArray, len);
printArray(charArray, len);
cout<<"------------------------" << endl;
int intArray[] = { 5, 7, 8, 4, 2, 3 };
len = sizeof(intArray) / sizeof(int);
mySort(intArray, len);
printArray(intArray, len);
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
二、分析与总结
选择排序算法:
外层循环遍历数组,从第一个元素开始依次选择最大的元素放在正确的位置上。
内层循环在未排序的部分中找到最大的元素的索引。
如果找到的最大元素不在当前位置,则交换当前位置和最大元素的位置。