並べ替えを選択する主なポイント:現在の並べ替えられていない整数から最小の整数を見つけて、並べ替えられたリストの最後に配置します(2つのキーワード:並べ替えと並べ替えなしに注意してください)。つまり、並べ替えの最小値を選択します。左側。
コントラストバブリングソート:バブリングソートの各比較は相互作用する可能性があり、選択的ソートの各トラバーサルは、現在のトラバーサルの最小値を持つ添え字のみを記録し、トラバーサルが完了した後に1回の交換のみが発生します。
コードとデバッグ結果:
#include <iostream>
using namespace std;
void select_sort(int list[], int num)
{
int min_pos = 0; //每次循环最小数的位置
for (int i = 0; i < num - 1; i++)
{
min_pos = i;
for (int j = i + 1; j < num; j++)
{
if (list[min_pos] > list[j])
min_pos = j; //记录最小数值的下标
}
swap(list[i],list[min_pos]); //每次遍历只发生一次交换
}
}
int main()
{
int arr[10] = {1,2,0,6,9,3,5,8,4,7};
select_sort(arr,sizeof(arr)/sizeof(arr[0]));
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
cout << arr[i] << " ";
cout << endl << endl << endl << endl;
return 0;
}
選択ソートの時間計算量:
比較の数:(N-1)+(N-2)+ ... + 2 + 1 =((N-1)+ 1)*(N-1)/ 2 = N ^ 2 / 2-N / 2;
交換回数:N-1
したがって、時間計算量は次のようになります。(N ^ 2 / 2-N / 2)+(N-1)= N ^ 2/2 + N / 2-1
Big Oの法則によれば、最高次の項が保持され、一定の銀が取り出されます。時間計算量はO(N ^ 2)です。