简单选择排序
简单选择排序的平均复杂度为 O(n2),
但效率通常比相同平均复杂度的直接插入排序还要差。
但由于选择排序是 内部排序,因此在内存严格受限的情况下还是可以用的。
选择排序的原理很简单,如下图所示:
持续从未处理元素中找到最小值并加入到前面已排序列的后面。
黄色 表示已经排好序的子序列;
蓝色表示当前处理项;
红色表示当前最小值
# include <iostream>
using namespace std;
void swap ( int * data1, int * data2)
{
int temp = * data1;
* data1 = * data2;
* data2 = temp;
}
void selectSort ( int data[ ] , int n)
{
int i, j, min_idx;
for ( i = 0 ; i < n- 1 ; i++ )
{
min_idx = i;
for ( j = i+ 1 ; j < n; j++ )
if ( data[ j] < data[ min_idx] )
min_idx = j;
swap ( & data[ min_idx] , & data[ i] ) ;
}
}
void printarray ( int data[ ] , int n)
{
for ( int i= 0 ; i< n; i++ )
cout << data[ i] << " " ;
}
int main ( )
{
int data[ ] = { 12 , 34 , 54 , 2 , 3 , 12 , 27 , 1 } ;
int n = 8 ;
cout << "data before shell sorting: \n" ;
printarray ( data, n) ;
selectSort ( data, n) ;
cout << "\ndata after shell sorting: \n" ;
printarray ( data, n) ;
return 0 ;
}