#数据结构#
#选择排序#
2023.10.7
选择排序(selection sort):在一个有n个元素的数组中,首先找出最大的元素,将它移到a[n-1](交换),然后在余下的n-1个元素中,找出最大的元素,将它移到a[n-2](交换),如此进行下去,直到剩下一个元素,完成排序。
可及时终止的实现方法:在寻找最大元素的过程中,若最大元素位于末尾,则不进行交换。
代码实现:
//可及时终止的选择排序
#include<iostream>
using namespace std;
template<class T>
//返回当前数组的最大元素的索引
int indexOfMax(T a[], int n)
{
int indexOfMax = 0;
for (int i = 1; i < n; i++)
{
if (a[indexOfMax] < a[i])
{
indexOfMax = i;
}
}
return indexOfMax;
}
template<class T>
//选择排序
void selectionSort(T a[], int n)
{
for (int size = n; size > 1; size--)
{
int j = indexOfMax(a, size);
if (j != size - 1) // 如果最大元素不在末尾,则进行交换
{
T swap = a[j];
a[j] = a[size - 1];
a[size - 1] = swap;
}
}
}
int main() {
int n;
cin >> n;
//动态分配内存
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
selectionSort(a, n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
delete[] a;
return 0;