基本思想:
在要排序的一个数组中,选择最大或最小的元素与首位或末尾的元素交换;然后,在剩下的元素中继续选择最大或最小的元素与首位或末尾的元素交换;以此类推,直到第n-1个元素交换完毕。
操作方法:
第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推.....
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。
算法的实现:
#include"iostream"
using namespace std;
void SelectSort(int arr[], int length)
{
for (int i = 0; i < length - 1; i++)
{
int x = arr[i];
int index = i;
for (int j = i + 1; j < length; j++)
{
if (arr[j] < x)
{
x = arr[j];
index = j;
}
}
arr[index] = arr[i];
arr[i] = x;
}
}
int main()
{
int arr[10] = { 1, 8, 9, 4, 3, 2, 6, 5, 7, 10 };
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
SelectSort(arr, 10);
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
}
实践复杂度: O(n^2)。 空间复杂度:1。