SelectionSort同样是一种简单的算法,算法的实质就是不断地从数据的无序区当中拿出最小(大)的元素并将其依次排列。SelectionSort依然是一个复杂度为O(n^2)级别的算法,但是这个算法和之前的InsertionSort有一些区别,最主要的区别是比较的顺序,InsertionSort是将无序区的元素拿出放到有序区之中比较,而SelectionSort是将无序区的元素先比较再依次排列构成有序区,这样本质性的原因造成了SelectionSort的最好情况和最坏情况一样糟糕,而InsertionSort的T(n)是与数据输入敏感的。
Pseudocode
/*
pseudocode
SELECTIONSORT(A)
for i = 1 to A.length - 1
key = i
for j = i to size
if A[key] > A[j]
key = j
exchange A[key] <-> A[i]
*/
下面是C++实现代码 如有不规范的地方望高人赐教
#include <iostream>
using namespace std;
void SelectionSort(int * A , int size);
/*
pseudocode
SELECTIONSORT(A)
for i = 1 to A.length - 1
key = i
for j = i to size
if A[key] > A[j]
key = j
exchange A[key] <-> A[i]
*/
void SelectionSort( int *A, int size)
{
for ( int i = 0; i < size - 1 ; i++)
{
int key = i ; //key代表当前unsorted区之中秩最小的一个元素
for(int j = i ; j < size ; j++)//从unsorted区之中寻找到最小的元素
if(A[key] > A[j]) key = j;
swap(A[key],A[i]);//找到最小元素之后依次排入sorted区
}
}
int ArryTest[] = { 5, 2, 4, 6, 1, 3};
int main() {
for( int i = 0; i < 6 ;i ++)
cout<<" " << ArryTest[i]<<" " ;
SelectionSort(ArryTest, sizeof(ArryTest)/sizeof(ArryTest[1]));
cout<<endl;
for( int i = 0; i < 6 ;i ++)
cout<<" " << ArryTest[i]<<" " ;
return 0;
}