روش انتخابی اولین روشیه که به ذهن می رسه: بزرگترین رکورد بین رکوردهای لیست رو پیدا می کنیم و به انتهای لیست انتقال می دیم. از بقیه رکوردها بزرگترین رو انتخاب می کنیم و انتهای لیست - کنار رکورد قبلی - قرار می دیم. در این روش یک عنصر انتخاب و با تمام عناصر مقایسه مشود و ... مثلا :
0: 9 1 6 4 7 3 5
1: 5 1 6 4 7 3 9
2: 5 1 6 4 3 7 9
3: 5 1 3 4 6 7 9
4: 4 1 3 5 6 7 9
5: 3 1 4 5 6 7 9
6: 1 3 4 5 6 7 9
پیاده سازی (مرتب سازی انتخابی) در c++
void selection_sort ( int arr[] , int n )
{
register int i , j ;
int max , temp ;
for ( i = n - 1 ; i > 0 ; i -- )
{
max = 0 ;
for ( j = 1 ; j <= i ; j ++ )
if ( arr[ max ] < arr[ j ] )
max = j ;
temp = arr[ i ] ;
arr[ i ] = arr[ max ] ;
arr[ max ] = temp ;
}
}
پیاده سازی (مرتب سازی انتخابی) در پاسکال
procedure selection_sort ( var arr : array of integer ) ;
var
i , j , max , temp : integer ;
begin
for i := High ( arr ) downto Low ( arr ) + 1 do
begin
max := 0 ;
for j := Low ( arr ) + 1 to i do
if arr[ max ] < arr [ j ] then
max := arr[j] ;
temp := arr[ i ] ;
arr[ i ] := arr[ max ] ;
arr[ max ] := temp ;
end ;
end ;
بررسی مرتب سازی انتخابی
تعداد مقایسه = 1/2(n^2-n)
تعداد تعویض ها در بدترین حالت = n^2 / 4+3(n-1)
تعداد تعویض ها در بهترین حالت = 3(n-1)
در بهترین حالت فقطn-1 عنصر باید تغییر مکان یابد و در هر تغییر مکان نیز سه مقایسه باید انجام گیرد. لذا تعداد تعویضها در بهترین حالت برابر 3(n-1) است. تعداد تعویضها در حالت متوسط از فرمول پیچیده ای محاسبه می شود که نتیجه آن عبارت زیر است .
تعداد تعویضها در حالت متوسط = x(log n + y)