選択ソートは、リストアイテムを選択し、その場所を別のアイテムと交換するソート手法です。最大のアイテムを選択し、リストの最も高いインデックスにあるアイテムと交換します。
アルゴリズムは、リストがソートされるまでこれを繰り返し行います。選択ソートがどのように機能するかよくわからない場合は、適切な場所に来ています。以下では、例を示しながら、さらに詳しく説明します。
選択ソート:詳細
リストがあるとします:[39、82、2、51、30、42、7]。選択ソートを使用してリストをソートするには、最初にリスト内の最大の番号を見つける必要があります。
指定されたリストでは、その番号は82です。82を最も高いインデックスの番号(つまり、7)と交換します。
最初のパスの後、新しいリストの順序は[39、7、2、51、30、42、82]になります。アルゴリズムがリスト全体を通過するたびに、それは「パス」と呼ばれます。
リストは、ソートプロセス中にソートされたサブリストとソートされていないサブリストを維持することに注意してください。
背景色cssを変更する方法
関連している: Big-O表記とは何ですか?
元のリストは、ゼロ項目のソートされたリストとすべての項目のソートされていないリストで始まります。次に、最初のパスの後に、番号82のみを持つソート済みリストがあります。
2番目のパスでは、ソートされていないサブリストの最大番号は51になります。この番号は42と交換され、以下の新しいリストの順序になります。
ラズベリーパイと関係があるクールなこと
[39、7、2、42、30、51、82]。
リスト全体がソートされるまで、このプロセスが繰り返されます。次の図は、プロセス全体をまとめたものです。
太字の黒の数字は、その時点で最も高いリスト値を示しています。緑のものは、ソートされたサブリストを示しています。
アルゴリズム分析
このアルゴリズムの複雑さ(Big-O表記を使用)を取得するには、以下の手順に従ってください。
最初のパスで、(n-1)の比較が行われます。 2回目のパスでは、(n-2)。 3番目のパスでは、(n-3)というように、(n-1)番目のパスまで続きます。これは1回の比較のみを行います。
以下のように比較を要約すると、次のようになります。
(n-1)+(n-1)+(n-1)+ ... + 1 =((n-1)n)/ 2。
したがって、選択ソートはO(n2)。
コードの実装
このコードは、PythonとJavaを使用して選択ソートを実行するために使用できる関数を示しています。
Python:
def selectionSort(mylist):
for x in range(len(mylist) - 1, 0, -1):
max_idx = 0
for posn in range(1, x + 1):
if mylist[posn] > mylist[max_idx]:
max_idx = posn
temp = mylist[x]
mylist[x] = mylist[max_idx]
mylist[max_idx] = temp
Java:
void selectionSort(int my_array[]){
for (int x = 0; x {
int index = x;
for (int y = x + 1; y if (my_array[y] index = y; // find lowest index
}
}
int temp = my_array[index]; // temp is a temporary storage
my_array[index] = my_array[x];
my_array[x] = temp;
}}
選択ソートからマージソートへの移行
上記のアルゴリズム分析が示しているように、選択ソートアルゴリズムはO(n2)。指数関数的に複雑であるため、非常に大きなデータセットには非効率的です。
アマゾン商品は配達されたが受け取られなかった
使用するはるかに優れたアルゴリズムは、O(nlogn)の複雑さを持つマージソートです。これで、選択ソートがどのように機能するかがわかりました。次に、ソートアルゴリズムのスタディリストで、マージソートを選択する必要があります。
共有 共有 つぶやき Eメール オーディオブックを無料でダウンロードするための8つの最高のウェブサイトオーディオブックは素晴らしい娯楽の源であり、消化がはるかに簡単です。ここにあなたがそれらを無料でダウンロードすることができる8つの最高のウェブサイトがあります。
次を読む 関連トピック- プログラミング
- プログラミング
- アルゴリズム
ジェロームはMakeUseOfのスタッフライターです。彼はプログラミングとLinuxに関する記事をカバーしています。彼は暗号愛好家でもあり、常に暗号業界を監視しています。
ジェローム・デビッドソンのその他の作品ニュースレターを購読する
ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。
購読するにはここをクリックしてください